一個計算社會安全號碼碼校正位的Python小程式

來源:互聯網
上載者:User
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 sysWi = [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 = 0if (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 % 11print "So, your indicates parity is : %s" % (IndexTable[Index])

運行程式方式如下:

#python getParity.py your-indentity-number-but-except-the-last-number

我的天啊,Python內建的資料結構是如此強大而易用,越來越為之而著迷啊,繼續diving~

用函數封裝一下,改進的代碼如下:

import sysif __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)

忘記函數原型吧,這裡不需要指明傳回值類型,不需要指明形參資料類型。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.