一个计算身份证号码校验位的Python小程序
S = Sum(Ai * Wi), i=0,.......16 (现在的身份证号码都是18位长,其中最后一位是校验位,15位的身份证号码好像不用了)
Ai对应身份证号码,Wi则为用于加权计算的值,它一串固定的数值,应该是根据某种规则得出的吧,用于取得最好的随机性,Wi的取之如下:
7 9 10 5
8 4 2 1
6 3 7 9
10 5 8 4 2
经过加权计算之后,得到一个S,用这个S去模11,取余值,然后查表得到校验位,这个索引表如下:
0 ----- 1
1 ----- 0
2 ----- x
3 ----- 9
4 ----- 8
5 ----- 7
6 ----- 6
7 ----- 5
8 ----- 4
9 ----- 3
10 ----- 2
程序代码如下:
import sys Wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7,9, 10, 5, 8, 4, 2] IndexTable = { #此处实际是无需使用字典的,使用一个包含11个元素的数组便可,数组中存放 0 : '1', #相应位置的号码,但是这也正好演示了Python高级数据结构的使用 1 : '0', 2 : 'x', 3 : '9', 4 : '8', 5 : '7', 6 : '6', 7 : '5', 8 : '4', 9 : '3', 10 : '2' } No = [] sum = 0 if (len(sys.argv[1:][0]) != 17): print "error number" sys.exit() for x in sys.argv[1:][0]: No.append(x) for i in range(17): sum = sum + (int(No[i]) * Wi[i]) Index = sum % 11 print "So, your indicates parity is : %s" % (IndexTable[Index])
运行程序方式如下:
#python getParity.py your-indentity-number-but-except-the-last-number
我的天啊,Python内置的数据结构是如此强大而易用,越来越为之而着迷啊,继续diving~
用函数封装一下,改进的代码如下:
import sys if __name__ != '__main__': print "Cannot run in module" sys.exit() Wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7,9, 10, 5, 8, 4, 2] IndexTable = { 0 : '1', 1 : '0', 2 : 'x', 3 : '9', 4 : '8', 5 : '7', 6 : '6', 7 : '5', 8 : '4', 9 : '3', 10 : '2' } def check(identity): if(len(identity) == 0): print "please input your identity number" sys.exit() elif (len(identity[0]) != 17): print "error number" sys.exit() def calculate(identity): No = [] sum = 0 for x in identity[0]: #这个方法是很笨拙的,直接使用No = list(identity[0])便可达到同样的目的 No.append(x) for i in range(17): sum = sum + (int(No[i]) * Wi[i]) Index = sum % 11 return IndexTable[Index] check(sys.argv[1:]) result = calculate(sys.argv[1:]) print "So, your indicates parity is : %s" % (result)
忘记函数原型吧,这里不需要指明返回值类型,不需要指明形参数据类型。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

在資料處理的過程中,經常需要從文字中提取特定格式的資訊。而身分證號碼作為一種比較常見的個人訊息,在資料處理中也常被用到。使用Python正規表示式可以方便地提取身分證號碼,並且還能對其進行一定的驗證。身分證號碼是由18位數組成的,包含了身分證號碼中的地區、出生年月日和校驗碼等資訊。在Python中,我們可以使用re模組的正規表示式函數來提取身分證號碼。首

身分證號碼和護照號碼是人們生活中常見的證件號碼。在實現涉及這些證件號碼的功能時,經常需要對輸入的號碼進行格式驗證,以確保其正確性。而在PHP中,使用正規表示式可以很好地實現此功能,本文就介紹如何使用PHP正規表示式驗證輸入字串是否為身分證號碼或護照號碼格式。一、身分證號碼驗證身分證號碼是由18位數字和最後一位可能是字母(校驗碼)組成的,其格式如下:前6

身分證號碼是我們日常生活中常用的一種身分證明工具,而其中所包含的生日資訊也是非常重要的。在使用PHP進行身分證號碼驗證時,我們常常需要判斷其生日資訊是否正確。本文將介紹如何使用PHP正規表示式驗證身分證號碼的生日資訊。 1.身分證號碼的基本格式身分證號碼是由18位數字和字母組成的字串,其中最後一位可能是數字或字母,可能是大寫或小寫。前17位是身分證的主

如何在Go語言中使用正規表示式判斷字串是否為合法身分證號碼身分證號碼是每個中國公民的唯一標識符,也是社會各個面向用來識別個體的重要依據。在資料處理中經常需要判斷字串是否為合法的身分證號碼。本文將介紹如何在Go語言中使用正規表示式來判斷字串是否為合法的身分證號碼。在Go語言中,使用正規表示式需要引入regexp套件。下面是一個使用正規表示式判斷身分證號

身分證、護照和港澳通行證號碼都是重要的個人身分證明,為了保障個人資料安全,我們需要在系統中驗證使用者輸入的證件號碼是否符合規範格式。而PHP正規表示式是一個非常強大的工具,可以方便地實現這個目的。本文將介紹如何使用PHP正規表示式驗證使用者輸入的身分證號碼、護照號碼及港澳通行證號碼。一、身分證號碼格式驗證身分證號碼是18位數字,在最後一位可能是數字或字母X。身分

在日常開發中,有許多場景需要匹配身分證號碼。身分證號碼是一個固定的格式,但是每個省份的規則略有不同,因此需要特定的正規表示式來匹配。 PHP是一種廣泛使用的程式語言,它提供了內建的正規表示式函數和類,可以方便地實現對身分證號碼的匹配。本文將介紹如何使用PHP正規表示式來匹配身分證號碼。身分證號碼格式身分證號碼是由18位數和一個校驗碼組成的,其中校驗

身分證號碼是我國居民身分識別的重要標誌,它可以在許多場合進行身分驗證。在應用程式中,為了確保身分證號碼的有效性及準確性,需要對其進行正規表示式驗證。本文將介紹如何使用PHP正規表示式驗證身分證號碼的有效性和性別。一、身分證號碼的組成及規則身分證號碼是由18位數或17位數加1位校驗碼組成的。其中,前17位代表身分證持有人的信息,後1位代表校驗碼,用於驗證身分證

身分證號碼是中國公民的唯一身分證明,其中包含了出生年月日等個人識別資訊。在實際應用中,有時需要對身分證號碼進行年齡範圍的驗證,PHP正規表示式是一種非常方便的實作方式。本文將介紹如何使用PHP正規表示式驗證身分證號碼的年齡範圍。一、身分證號碼結構身分證號碼是由十七位元字元組成,分為六個部分:前兩位為省代碼,中間四位為市縣代碼,接下來兩位為年份代碼,再下兩位元
