2008年7月19日星期六

生份證產生器

http://www.gcforum.org/forumdisplay.php?fid=638

生份證產生器
底下說明一下如果要寫一個生份證產生器的程式需要的知道的字號產生規則,才能寫出一個可用的程式,其實規則並不複雜,也就是說包括戶籍地驗證碼還有其它的數字的組合而已,而大陸的生份證字號規則又不一樣。

我們現在來看一下整個規則,生份證產生器的相關規則如後所述,第一個就是英文字母,A代表您戶籍地代碼的十位數字,B代表個位數字,CDEFGHIJK分別代表著緊接而來的九個號碼。

定義生份證產生器的函數

然後我們來定義函數:f(A~K)=A+9B+8C+7D+6E+5F+4G+3H+2I+J+K,當函數值f(A~K)=10M的時候,M屬於常數,也就是說,該值為10的倍數的時候,那這組身分證字號就是可以使用的。

我們來看一個實例比較清楚生份證產生器實際要如何來寫:比方這個A123456789 生份證字號,我們可以將它列成 10123456789,不知道A為什麼是10的話,可以參考另外一篇,1+9x0+8x1+7x2+6x3+5x4+4x5+3x6+2x7+8+9=130,130是10的倍數,也就是說這一組是可以使用的,很多網頁型的都可以直接下載來用。

再舉一個實例:B284793817 => 11284793817,這也是可以用的,你可以自己去算一下為什麼這個生份證字號可以使用。仔細看看函數,J跟K的加權值都是1,也就是說J+1並且K-1的話,那麼這一組字號也是可以使用的,所以說基本上每一組生分證產生器字號加減9號就又是另外一組。生份證產生器便是使用上述規則亂數產生號碼。

生份證產生器字號字母所代表的意義

第一碼英文字代表該組號碼配賦時所屬的縣市﹝非出生地﹞,
第二碼數字1為男生2為女生,
第3碼至第10碼為任意一串數字,
但含英文字之全部號碼可用公式加以核算該組號碼是否正確,
例如R123456783,R=25,生份證產生器檢查公式是:2+5*9+1*8+2*7+3*6+4*5+5*4+6*3+7*2+8*1=167,其167再除以10求餘數結果。其餘數結果的個位數為7以10減去得3(檢查碼)。其餘數結果的個位數為0時,則得0(檢查碼)。

所以生份證產生器就是根據這些簡單的規則所寫出來的。其實看起來並不複雜難懂。