最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用python代碼進(jìn)行身份證號(hào)校驗(yàn)的實(shí)現(xiàn)示例

 更新時(shí)間:2019年11月21日 11:14:11   作者:我不是高材生  
這篇文章主要介紹了使用python代碼進(jìn)行身份證號(hào)校驗(yàn)的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

先說(shuō),還有很多可以優(yōu)化的地方。

1、比如加入15位身份證號(hào)的校驗(yàn),嗯哼,15位的好像沒(méi)有校驗(yàn),那就只能提取個(gè)出生年月日啥的了。
2、比如判斷加入地址數(shù)據(jù)庫(kù),增加輸出信息
3、增加時(shí)間判斷,出生日期大于當(dāng)前時(shí)間的判為非法

代碼是老師放了一個(gè)提取出生年月日的題目擴(kuò)展過(guò)來(lái)的,目前來(lái)看代碼運(yùn)行正常,有沒(méi)有bug就不造了。

身份證號(hào)校驗(yàn)規(guī)則

話說(shuō)身份證號(hào)校驗(yàn),最重要的肯定是校驗(yàn)。那么如何校驗(yàn)?如何又有15、18位身份證號(hào)之分?

1、1999年07月01日以前使用15位身份證號(hào),也就是第一代身份證
2、二代身份證增加位數(shù)至18,多出來(lái)的3位分別是出生年份的前兩個(gè)數(shù)字和一位校驗(yàn)碼
3、身份證各位置代表信息如下

身份證校驗(yàn)

4、順序碼的前兩位代表當(dāng)?shù)嘏沙鏊a,第三位是對(duì)同年、同月、同日出生的人編定的順序號(hào),順序碼的奇數(shù)分配給男性,偶數(shù)分配給女性。

5、校驗(yàn)碼,身份證號(hào)18位,前17位為本體碼,最后一位是算出來(lái)的校驗(yàn)碼。校驗(yàn)規(guī)則如下:

前17位分別乘以【7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2】
然后將17個(gè)乘積加一塊取余11得到一個(gè)0-10范圍的數(shù)字
0-10分別對(duì)應(yīng)【1,0,x,9,8,7,6,5,4,3,2】即校驗(yàn)位數(shù)字
出現(xiàn) x 是因?yàn)樾r?yàn)碼為10但為了保證號(hào)碼長(zhǎng)度不變,換成了 x

python校驗(yàn)身份證號(hào)代碼如下:

version1.1

def check_id_length(n):
  if len(str(n)) != 18:
    print("只支持18位身份證號(hào)查詢")
    return False
  else:
    return True
def check_id_data(n):
    var=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]
    var_id=['1','0','x','9','8','7','6','5','4','3','2']
    n = str(n)
    sum = 0
    if int(n[16])%2==0:
      gender="女"
      same=int(int(n[16])/2)
    else:
      gender="男"
      same=int((int(n[16])+1)/2)
    for i in range(0,17):
      sum += int(n[i])*var[i]
    sum %= 11
    if (var_id[sum])==str(n[17]):
      print("身份證號(hào)規(guī)則核驗(yàn)通過(guò),校驗(yàn)碼是:",var_id[sum])
      print("出生于:",n[6:10],"年",n[10:12],"月",n[12:14],"日","性別:",gender,"\n當(dāng)?shù)赝詣e同生日排名:",same)
      return sum
    else:
      print("出生于:",n[6:10],"年",n[10:12],"月",n[12:14],"日","性別:",gender,"\n當(dāng)?shù)赝詣e同生日排名:",same)
      print("但身份證號(hào)規(guī)則核驗(yàn)失敗,校驗(yàn)碼應(yīng)為",var_id[sum],",當(dāng)前校驗(yàn)碼是:",n[17])
      return 0
n = input("請(qǐng)輸入18位身份證號(hào):")
if check_id_length(n):
  check_id_data(n)
else:
  print("請(qǐng)重新輸入")

代碼說(shuō)明

1、前六行定義了長(zhǎng)度校驗(yàn)函數(shù),校驗(yàn)長(zhǎng)度是否為 18
2、7-28行定義了校驗(yàn)位驗(yàn)證函數(shù),驗(yàn)證校驗(yàn)位是否正確
3、29-33行調(diào)用了上述兩行數(shù)以完成校驗(yàn)功能

其中

1、第8行定義了加權(quán)數(shù)字列表,列表元素類(lèi)型為 int
2、第9行定義了標(biāo)準(zhǔn)校驗(yàn)位列表,列表元素類(lèi)型為 str
3、第10行將接收到的身份證號(hào)轉(zhuǎn)換為 str 類(lèi)型,以方便切片提出中間位
4、12-17行用于計(jì)算身份證號(hào)主性別以及當(dāng)?shù)?派出所管轄范圍)同性別同生日人的順序
5、18-20分別進(jìn)行了加權(quán)求和并取余, 這是也是這段小代碼的核心算法
6、21-28進(jìn)行校驗(yàn)位對(duì)比,并輸出對(duì)比結(jié)果,同時(shí)提出出生年月日

演示代碼,加入顯示判斷

verion1.2

import time
def check_id_length(n):
  if len(str(n)) != 18:
    print("只支持18位身份證號(hào)查詢")
    return False
  else:
    return True

def check_id_data(n):
  n = str(n)
  n2 = str(n[:16])
  time_now = int(time.strftime("%Y",time.localtime()))
  is_digit = (not(n2.isdigit())) or (not(n[17].isdigit()) and (n[17]) !="x")
  if (is_digit):
    print("對(duì)不起,您這是火星身份證,暫不受理")
  elif (int(n[6:10]))>time_now:
      print(n[6:10],"年的人?您是穿越回來(lái)嗎?")
  elif (int(n[10:12]))>12:
    print(n[10:12],"月出生?,您是撿來(lái)的吧!!")
  elif (int(n[12:14]))>31:
    print(n[12:14],"日出生?,您一定是充話費(fèi)送的")
  else:
    check_id_data2(n)
def check_id_data2(n):
    var=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]
    var_id=['1','0','x','9','8','7','6','5','4','3','2']
    sum = 0
    if int(n[16])%2==0:
      gender="女"
      same=int(int(n[16])/2)
    else:
      gender="男"
      same=int((int(n[16])+1)/2)
    for i in range(0,17):
      sum += int(n[i])*var[i]
    sum %= 11
    if (var_id[sum])==str(n[17]):
      print("身份證號(hào)規(guī)則核驗(yàn)通過(guò),校驗(yàn)碼是:",var_id[sum])
      print("出生于:",n[6:10],"年",n[10:12],"月",n[12:14],"日","性別:",gender,"\n當(dāng)?shù)赝詣e同生日排名:",same)
      return sum
    else:
      print("出生于:",n[6:10],"年",n[10:12],"月",n[12:14],"日","性別:",gender,"\n當(dāng)?shù)赝詣e同生日排名:",same)
      print("但身份證號(hào)規(guī)則核驗(yàn)失敗,校驗(yàn)碼應(yīng)為",var_id[sum],",當(dāng)前校驗(yàn)碼是:",n[17])
      return 0
while(1):
  print("\n菜單,請(qǐng)輸入數(shù)字\n----------------------")
  print("輸入1手動(dòng)輸入身份證號(hào)")
  print("輸入2選擇測(cè)試號(hào)")
  print("不然就拜拜")
  print("----------------------")
  select = input("\n請(qǐng)輸入:")
  if (select.isdigit()):
    pass
  else:
    print("說(shuō)好的輸入數(shù)字的呢,拜拜了您嘞")
    break
  select = int(select)
  if (select == 1):
    n = input("請(qǐng)輸入18位身份證號(hào):")
    if check_id_length(n):
      check_id_data(n)
    else:
      print("請(qǐng)重新輸入")
  elif select == 2:
         print("\n----------------------")
         print("開(kāi)始校驗(yàn)身份證號(hào):61011519920317602")
         check_id_length(61011519920317602)
         print("\n----------------------")
         print("開(kāi)始校驗(yàn)身份證號(hào):610115199203176021")
         check_id_data(610115199203176021)
         print("\n----------------------")
         print("開(kāi)始校驗(yàn)身份證號(hào):610115199203176028")
         check_id_data(610115199203176028)
  else:
         break

代碼測(cè)試效果如下:

測(cè)試圖一

測(cè)試圖二:

測(cè)試圖二

測(cè)試圖三:

測(cè)試圖三

更多測(cè)試請(qǐng)自行運(yùn)行代碼!

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python+OpenCV實(shí)現(xiàn)閾值分割的方法詳解

    Python+OpenCV實(shí)現(xiàn)閾值分割的方法詳解

    閾值分割法是一種基于區(qū)域的圖像分割技術(shù),原理是把圖像像素點(diǎn)分為若干類(lèi)。本文將利用Python+OpenCV實(shí)現(xiàn)閾值分割,感興趣的可以了解一下
    2022-05-05
  • Python通過(guò)模塊化開(kāi)發(fā)優(yōu)化代碼的技巧分享

    Python通過(guò)模塊化開(kāi)發(fā)優(yōu)化代碼的技巧分享

    模塊化開(kāi)發(fā)就是把代碼拆成一個(gè)個(gè)“零件”,該封裝封裝,該拆分拆分,下面小編就來(lái)和大家簡(jiǎn)單聊聊python如何用模塊化開(kāi)發(fā)進(jìn)行代碼優(yōu)化吧
    2025-04-04
  • 詳解如何使用opencv實(shí)現(xiàn)圖片相似度檢測(cè)

    詳解如何使用opencv實(shí)現(xiàn)圖片相似度檢測(cè)

    這篇文章主要為大家詳細(xì)介紹了如何使用opencv實(shí)現(xiàn)圖片相似度檢測(cè),文中的示例代碼講解詳細(xì),對(duì)于我們學(xué)習(xí)人工智能有一定的幫助,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • Python使用爬蟲(chóng)猜密碼

    Python使用爬蟲(chóng)猜密碼

    我們可以通過(guò)python 來(lái)實(shí)現(xiàn)這樣一個(gè)簡(jiǎn)單的爬蟲(chóng)猜密碼功能。下面就看看如何使用python來(lái)實(shí)現(xiàn)這樣一個(gè)功能,對(duì)python爬蟲(chóng)猜密碼相關(guān)知識(shí)感興趣的朋友參考下吧
    2016-02-02
  • 由淺入深學(xué)習(xí)TensorFlow MNIST 數(shù)據(jù)集

    由淺入深學(xué)習(xí)TensorFlow MNIST 數(shù)據(jù)集

    這篇文章主要由淺入深學(xué)習(xí)的講解TensorFlow MNIST 數(shù)據(jù)集,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • 教你怎么用Python實(shí)現(xiàn)GIF動(dòng)圖的提取及合成

    教你怎么用Python實(shí)現(xiàn)GIF動(dòng)圖的提取及合成

    今天教大家一個(gè)Python有趣好玩的小功能:將多張圖片轉(zhuǎn)為GIF,同時(shí)也可以將一個(gè)GIF動(dòng)圖提取出里面的圖片,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • 使用Python進(jìn)行圖像裁剪的多種方法及代碼示例

    使用Python進(jìn)行圖像裁剪的多種方法及代碼示例

    這篇文章主要介紹了使用Python進(jìn)行圖像裁剪的多種方法,包括使用PIL庫(kù)和OpenCV庫(kù),還提供了高級(jí)技巧和示例代碼,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-01-01
  • Python使用pickle模塊報(bào)錯(cuò)EOFError Ran out of input的解決方法

    Python使用pickle模塊報(bào)錯(cuò)EOFError Ran out of input的解決方法

    這篇文章主要介紹了Python使用pickle模塊報(bào)錯(cuò)EOFError Ran out of input的解決方法,涉及Python異常捕獲操作處理相關(guān)使用技巧,需要的朋友可以參考下
    2018-08-08
  • python實(shí)現(xiàn)PCA降維的示例詳解

    python實(shí)現(xiàn)PCA降維的示例詳解

    今天小編就為大家分享一篇python實(shí)現(xiàn)PCA降維的示例詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-02-02
  • Python 正則表達(dá)式詳解

    Python 正則表達(dá)式詳解

    這篇文章主要介紹了Python中正則表達(dá)式的詳細(xì)教程,正則表達(dá)式是Python學(xué)習(xí)進(jìn)階當(dāng)中的重要內(nèi)容,需要的朋友可以參考下
    2021-10-10

最新評(píng)論

曲麻莱县| 武威市| 宁乡县| 苏尼特右旗| 抚宁县| 邹平县| 延长县| 泽库县| 都兰县| 方城县| 桐庐县| 濮阳县| 抚远县| 康平县| 岳普湖县| 依兰县| 景宁| 灵璧县| 珠海市| 清河县| 沐川县| 长葛市| 稻城县| 桓仁| 滦平县| 东乡县| 甘泉县| 清水河县| 铜鼓县| 永定县| 永寿县| 香港 | 镇雄县| 桃源县| 阳江市| 尖扎县| 丹阳市| 织金县| 平江县| 鹰潭市| 鱼台县|