成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

使用python怎么對身份證號進(jìn)行校驗(yàn)-創(chuàng)新互聯(lián)

本篇文章為大家展示了使用python怎么對身份證號進(jìn)行校驗(yàn),內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

成都創(chuàng)新互聯(lián) - BGP機(jī)房服務(wù)器托管,四川服務(wù)器租用,成都服務(wù)器租用,四川網(wǎng)通托管,綿陽服務(wù)器托管,德陽服務(wù)器托管,遂寧服務(wù)器托管,綿陽服務(wù)器托管,四川云主機(jī),成都云主機(jī),西南云主機(jī),BGP機(jī)房服務(wù)器托管,西南服務(wù)器托管,四川/成都大帶寬,機(jī)柜大帶寬租用·托管,四川老牌IDC服務(wù)商

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

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

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

使用python怎么對身份證號進(jìn)行校驗(yàn)

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

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

前17位分別乘以【7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2】
然后將17個乘積加一塊取余11得到一個0-10范圍的數(shù)字
0-10分別對應(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但為了保證號碼長度不變,換成了 x

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

version1.1

def check_id_length(n):
  if len(str(n)) != 18:
    print("只支持18位身份證號查詢")
    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("身份證號規(guī)則核驗(yàn)通過,校驗(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("但身份證號規(guī)則核驗(yàn)失敗,校驗(yàn)碼應(yīng)為",var_id[sum],",當(dāng)前校驗(yàn)碼是:",n[17])
      return 0
n = input("請輸入18位身份證號:")
if check_id_length(n):
  check_id_data(n)
else:
  print("請重新輸入")

代碼說明

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

演示代碼,加入顯示判斷

verion1.2

import time
def check_id_length(n):
  if len(str(n)) != 18:
    print("只支持18位身份證號查詢")
    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("對不起,您這是火星身份證,暫不受理")
  elif (int(n[6:10]))>time_now:
      print(n[6:10],"年的人?您是穿越回來嗎?")
  elif (int(n[10:12]))>12:
    print(n[10:12],"月出生?,您是撿來的吧!!")
  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("身份證號規(guī)則核驗(yàn)通過,校驗(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("但身份證號規(guī)則核驗(yàn)失敗,校驗(yàn)碼應(yīng)為",var_id[sum],",當(dāng)前校驗(yàn)碼是:",n[17])
      return 0
while(1):
  print("\n菜單,請輸入數(shù)字\n----------------------")
  print("輸入1手動輸入身份證號")
  print("輸入2選擇測試號")
  print("不然就拜拜")
  print("----------------------")
  select = input("\n請輸入:")
  if (select.isdigit()):
    pass
  else:
    print("說好的輸入數(shù)字的呢,拜拜了您嘞")
    break
  select = int(select)
  if (select == 1):
    n = input("請輸入18位身份證號:")
    if check_id_length(n):
      check_id_data(n)
    else:
      print("請重新輸入")
  elif select == 2:
         print("\n----------------------")
         print("開始校驗(yàn)身份證號:61011519920317602")
         check_id_length(61011519920317602)
         print("\n----------------------")
         print("開始校驗(yàn)身份證號:610115199203176021")
         check_id_data(610115199203176021)
         print("\n----------------------")
         print("開始校驗(yàn)身份證號:610115199203176028")
         check_id_data(610115199203176028)
  else:
         break

上述內(nèi)容就是使用python怎么對身份證號進(jìn)行校驗(yàn),你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

文章題目:使用python怎么對身份證號進(jìn)行校驗(yàn)-創(chuàng)新互聯(lián)
鏈接分享:http://jinyejixie.com/article4/dpeioe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、動態(tài)網(wǎng)站用戶體驗(yàn)、網(wǎng)站設(shè)計、虛擬主機(jī)電子商務(wù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站
庆城县| 拉孜县| 监利县| 海安县| 昭觉县| 申扎县| 台中县| 大埔区| 云林县| 太白县| 哈密市| 中宁县| 榆社县| 四子王旗| 城口县| 贵港市| 甘孜| 佳木斯市| 友谊县| 沙田区| 桐梓县| 剑川县| 青阳县| 前郭尔| 尤溪县| 南宁市| 垦利县| 颍上县| 普格县| 托克托县| 吴堡县| 泾阳县| 农安县| 绥棱县| 灯塔市| 汉源县| 关岭| 蒙城县| 诸城市| 南汇区| 襄城县|