日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

身份证号码验证算法

發布時間:2023/12/20 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 身份证号码验证算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

做項目的時候需要對拿到的數據進行“清洗”,比如剔除一些不可能存在的身份證號碼。查閱了網上的身份證號碼驗證算法,自己也總結一下。

(一)18身份證號碼的結構  公民身份號碼是特征組合碼,由十七位數字本體碼和一位校驗碼組成。

排列順序從左至右依次為:六位數字地址碼,八位數字出生日期碼,三位數字順序碼和一位校驗碼。

1、地址碼   表示編碼對象常住戶口所在縣(市、旗、區)的行政區域劃分代碼,按GB/T2260的規定執行。

2、出生日期碼?  表示編碼對象出生的年、月、日,按GB/T7408的規定執行,年、月、日代碼之間不用分隔符。

3、順序碼   表示在同一地址碼所標識的區域范圍內,對同年、同月、同日出生的人編定的順序號,順序碼的奇數分配給男性,偶數分配給女性

4、校驗碼計算步驟


(1)十七位數字本體碼加權求和公式

S = Sum(Ai * Wi), i = 0, … , 16 ,先對前17位數字的權求和

Ai:表示第i位置上的身份證號碼數字值(0~9)

Wi:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 (表示第i位置上的加權因子)

(2)計算模   Y = mod(S, 11)

(3)根據模,查找得到對應的校驗碼   Y: 0 1 2 3 4 5 6 7 8 9 10   校驗碼: 1 0 X 9 8 7 6 5 4 3 2

(二)根據17位數字本體碼獲取最后一位校驗碼程序實例

public class Id18 {int[] weight={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}; ? ?//十七位數字本體碼權重char[] validate={ '1','0','X','9','8','7','6','5','4','3','2'}; ? ?//mod11,對應校驗碼字符值 ? ?public char getValidateCode(String id17){int sum = 0;int mode = 0;for(int i = 0; i < id17.length(); i++){sum=sum+Integer.parseInt(String.valueOf(id17.charAt(i)))*weight[i];}mode = sum % 11;return validate[mode];}public static void main(String[] args){Id18 tes t= new Id18();System.out.println("該身份證驗證碼:"+test.getValidateCode("14230219700101101")); ? ?//該身份證校驗碼:3}}

(三)說明

1.程序可以根據已有的17位數字本體碼,獲取對應的驗證碼。

2.該程序可以剔除驗證碼不正確的身份證號碼。

3.15位的身份證出生年份采用年份后2位,沒有最后1位校驗碼。

4.完整的身份證18位,最后一位校驗位可能是非數字。我們的一個項目,數據庫保存前17位數字,這樣對應一些SQL語句(比如inner join)有加速作用的!!!


總結

以上是生活随笔為你收集整理的身份证号码验证算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。