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

Python實(shí)現(xiàn)身份證號(hào)碼解析

 更新時(shí)間:2015年09月01日 12:11:28   投稿:hebedich  
本文給大家匯總介紹下使用Python實(shí)現(xiàn)身份證號(hào)碼驗(yàn)證解析的幾個(gè)方法,有需要的小伙伴可以參考下。

中國的居民身份證有18位。其中前17位是信息碼,最后1位是校驗(yàn)碼。每位信息碼可以是0-9的數(shù)字,而校驗(yàn)碼可以是0-9或X,其中X表示10。

身份證校驗(yàn)碼算法:

設(shè)18位身份證號(hào)序列從左到右為:
引用
a[0], a[1], a[2], a[3], ..., a[16], a[17]

其中a[i]表示第i位數(shù)字,i=0,1,2,...,17,如果最后一位(校驗(yàn)位)是X,則a[17]=10

每一位被賦予一個(gè)“權(quán)值”,其中,第i位的權(quán)值w[i]的計(jì)算方法是:
引用
w[i] = 2**(17-i) % 11

其中,i=0,1,2,3,...,17,運(yùn)算符按Python慣例:x**y表示x的y次方,x%y表示x除以y的余數(shù)。

如果一個(gè)身份證號(hào)是正確的,那么:
引用
(a[0]*w[0] + a[1]*w[1] + a[2]*w[2] + ... + a[16]*w[16] + a[17]*w[17]) % 11 == 1

實(shí)際上,校驗(yàn)位a[17]的計(jì)算方法,就是巧妙地選擇一個(gè)值使得上式成立。

根據(jù)上述算法,下面是一個(gè)驗(yàn)證身份證號(hào)正確性的程序。

初學(xué)者————代碼沒有什么依照編寫規(guī)范,流水賬的模式。還有兩個(gè)功能沒有實(shí)現(xiàn):
1、依照身份證號(hào)碼的區(qū)域代碼解析所在區(qū)域;
2、將身份證校驗(yàn)碼的校驗(yàn)作為前置判斷,如果錯(cuò)誤就不再解析其他內(nèi)容,汗,我還不會(huì);

ID=input('請(qǐng)輸入十八位身份證號(hào)碼: ')
if len(ID)==18:
  print("你的身份證號(hào)碼是 "+ID)
else:
  print("錯(cuò)誤的身份證號(hào)碼")
 
ID_add=ID[0:6]
ID_birth=ID[6:14]
ID_sex=ID[14:17]
ID_check=ID[17]
 
#ID_add是身份證中的區(qū)域代碼,如果有一個(gè)行政區(qū)劃代碼字典,就可以用獲取大致地址#
 
year=ID_birth[0:4]
moon=ID_birth[4:6]
day=ID_birth[6:8]
print("生日: "+year+'年'+moon+'月'+day+'日')
 
if int(ID_sex)%2==0:
  print('性別:女')
else:
  print('性別:男')
 
   
#此部分應(yīng)為錯(cuò)誤判斷,如果錯(cuò)誤就不應(yīng)有上面的輸出,如何實(shí)現(xiàn)?#
W=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]
ID_num=[18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2]
ID_CHECK=['1','0','X','9','8','7','6','5','4','3','2']
ID_aXw=0
for i in range(len(W)):
  
  ID_aXw=ID_aXw+int(ID[i])*W[i]
  
ID_Check=ID_aXw%11
if ID_check==ID_CHECK[ID_Check]:
  print('正確的身份證號(hào)碼')
else:
  print('錯(cuò)誤的身份證號(hào)碼')

我們?cè)賮砜匆粋€(gè)更加完善些的示例

import re
#Errors=['驗(yàn)證通過!','身份證號(hào)碼位數(shù)不對(duì)!','身份證號(hào)碼出生日期超出范圍或含有非法字符!','身份證號(hào)碼校驗(yàn)錯(cuò)誤!','身份證地區(qū)非法!']
def checkIdcard(idcard):
  Errors=['驗(yàn)證通過!','身份證號(hào)碼位數(shù)不對(duì)!','身份證號(hào)碼出生日期超出范圍或含有非法字符!','身份證號(hào)碼校驗(yàn)錯(cuò)誤!','身份證地區(qū)非法!']
  area={"11":"北京","12":"天津","13":"河北","14":"山西","15":"內(nèi)蒙古","21":"遼寧","22":"吉林","23":"黑龍江","31":"上海","32":"江蘇","33":"浙江","34":"安徽","35":"福建","36":"江西","37":"山東","41":"河南","42":"湖北","43":"湖南","44":"廣東","45":"廣西","46":"海南","50":"重慶","51":"四川","52":"貴州","53":"云南","54":"西藏","61":"陜西","62":"甘肅","63":"青海","64":"寧夏","65":"新疆","71":"臺(tái)灣","81":"香港","82":"澳門","91":"國外"}
  idcard=str(idcard)
  idcard=idcard.strip()
  idcard_list=list(idcard)
  #地區(qū)校驗(yàn)
  if(not area[(idcard)[0:2]]):
    print Errors[4]
  #15位身份號(hào)碼檢測(cè)
  if(len(idcard)==15):
    if((int(idcard[6:8])+1900) % 4 == 0 or((int(idcard[6:8])+1900) % 100 == 0 and (int(idcard[6:8])+1900) % 4 == 0 )):
      erg=re.compile('[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$')#//測(cè)試出生日期的合法性
    else:
      ereg=re.compile('[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$')#//測(cè)試出生日期的合法性
    if(re.match(ereg,idcard)):
      print Errors[0]
    else:
      print Errors[2]
  #18位身份號(hào)碼檢測(cè)
  elif(len(idcard)==18):
    #出生日期的合法性檢查
    #閏年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))
    #平年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))
    if(int(idcard[6:10]) % 4 == 0 or (int(idcard[6:10]) % 100 == 0 and int(idcard[6:10])%4 == 0 )):
      ereg=re.compile('[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$')#//閏年出生日期的合法性正則表達(dá)式
    else:
      ereg=re.compile('[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$')#//平年出生日期的合法性正則表達(dá)式
    #//測(cè)試出生日期的合法性
    if(re.match(ereg,idcard)):
      #//計(jì)算校驗(yàn)位
      S = (int(idcard_list[0]) + int(idcard_list[10])) * 7 + (int(idcard_list[1]) + int(idcard_list[11])) * 9 + (int(idcard_list[2]) + int(idcard_list[12])) * 10 + (int(idcard_list[3]) + int(idcard_list[13])) * 5 + (int(idcard_list[4]) + int(idcard_list[14])) * 8 + (int(idcard_list[5]) + int(idcard_list[15])) * 4 + (int(idcard_list[6]) + int(idcard_list[16])) * 2 + int(idcard_list[7]) * 1 + int(idcard_list[8]) * 6 + int(idcard_list[9]) * 3
      Y = S % 11
      M = "F"
      JYM = "10X98765432"
      M = JYM[Y]#判斷校驗(yàn)位
      if(M == idcard_list[17]):#檢測(cè)ID的校驗(yàn)位
        print Errors[0]
      else:
        print Errors[3]
    else:
      print Errors[2]
  else:
    print Errors[1]

可以通過命令行輸入。第一個(gè)命令行參數(shù)是身份證號(hào)。輸出Valid或Invalid。

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
 
USAGE="""\ 
USAGE: python shenfenzheng.py shenfenzhenghao 
""" 
 
chmap = { 
  '0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9, 
  'x':10,'X':10 
  } 
 
def ch_to_num(ch): 
  return chmap[ch]   
 
def verify_string(s): 
  char_list = list(s) 
  num_list = [ch_to_num(ch) for ch in char_list] 
  return verify_list(num_list) 
 
def verify_list(l): 
  sum = 0 
  for ii,n in enumerate(l): 
    i = 18-ii 
    weight = 2**(i-1) % 11 
    sum = (sum + n*weight) % 11 
     
#    print "i=%d,weight=%d,n=%d,sum=%d"%(i,weight,n,sum) 
   
#  print sum 
  return sum==1 
   
if __name__=='__main__': 
  import sys 
  if len(sys.argv)!=2: 
    print USAGE 
    sys.exit(1) 
  result = verify_string(sys.argv[1]) 
  if result: 
    print "Valid" 
  else: 
    print "Invalid" 

命令行使用舉例:
引用

$ python shenfenzheng.py 320105198209275127 

相關(guān)文章

  • python獲取服務(wù)器響應(yīng)cookie的實(shí)例

    python獲取服務(wù)器響應(yīng)cookie的實(shí)例

    今天小編就為大家分享一篇python獲取服務(wù)器響應(yīng)cookie的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • Python+Pygame實(shí)戰(zhàn)之吃豆豆游戲的實(shí)現(xiàn)

    Python+Pygame實(shí)戰(zhàn)之吃豆豆游戲的實(shí)現(xiàn)

    這篇文章主要為大家介紹了如何利用Python中的Pygame模塊實(shí)現(xiàn)仿吃豆豆游戲,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python游戲開發(fā)有一定幫助,需要的可以參考一下
    2022-06-06
  • window環(huán)境pip切換國內(nèi)源(pip安裝異常緩慢的問題)

    window環(huán)境pip切換國內(nèi)源(pip安裝異常緩慢的問題)

    這篇文章主要介紹了window環(huán)境pip切換國內(nèi)源(pip安裝異常緩慢的問題),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Python實(shí)現(xiàn)遍歷數(shù)據(jù)庫并獲取key的值

    Python實(shí)現(xiàn)遍歷數(shù)據(jù)庫并獲取key的值

    本文給大家分享的是Python實(shí)現(xiàn)遍歷數(shù)據(jù)庫并獲取key的值的方法,主要是使用for循環(huán)來實(shí)現(xiàn),有需要的小伙伴可以參考下。
    2015-05-05
  • python3獲取url文件大小示例代碼

    python3獲取url文件大小示例代碼

    這篇文章主要介紹了python3獲取url文件大小,本文通過示例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Python制作簡(jiǎn)易版小工具之計(jì)算天數(shù)的實(shí)現(xiàn)思路

    Python制作簡(jiǎn)易版小工具之計(jì)算天數(shù)的實(shí)現(xiàn)思路

    這篇文章主要介紹了Python制作簡(jiǎn)易版小工具之計(jì)算天數(shù)的實(shí)現(xiàn)思路,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • python+Tesseract OCR實(shí)現(xiàn)截屏識(shí)別文字

    python+Tesseract OCR實(shí)現(xiàn)截屏識(shí)別文字

    pytesseract Python常用pytesseract進(jìn)行圖片上的文字識(shí)別,本文主要介紹了python+Tesseract?OCR實(shí)現(xiàn)截屏識(shí)別文字,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-11-11
  • Python中如何自定義函數(shù)

    Python中如何自定義函數(shù)

    這篇文章主要介紹了Python中如何自定義函數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • python生成驗(yàn)證碼圖片代碼分享

    python生成驗(yàn)證碼圖片代碼分享

    這篇文章主要為大家介紹了python生成驗(yàn)證碼圖片代碼,生成原理是將一串隨機(jī)產(chǎn)生的數(shù)字或符號(hào),生成一幅圖片,圖片里加上一些干擾象素,想要實(shí)現(xiàn)驗(yàn)證碼圖片的朋友可以參考一下
    2016-01-01
  • 分享6個(gè)好用到爆的Pycharm插件

    分享6個(gè)好用到爆的Pycharm插件

    這篇文章主要介紹了分享6個(gè)好用到爆的Pycharm插件,在安裝上之后,我們的編程效率、工作效率都能夠得到極大地提升,下面分享的內(nèi)容,需要的小伙伴可以參考一下
    2022-02-02

最新評(píng)論

漾濞| 突泉县| 璧山县| 沁水县| 蓬安县| 顺昌县| 江陵县| 威远县| 蒙城县| 和顺县| 永城市| 鄂托克旗| 积石山| 安达市| 沅江市| 将乐县| 沭阳县| 普兰县| 望奎县| 乌鲁木齐市| 巩留县| 金溪县| 丹棱县| 武平县| 泰宁县| 忻州市| 云梦县| 沅陵县| 民乐县| 庄河市| 赤城县| 乌兰浩特市| 商城县| 武城县| 庆安县| 嘉黎县| 柳州市| 济宁市| 太仆寺旗| 丰镇市| 昌黎县|