身份證號碼驗證算法深入研究和Java實現(xiàn)
做項目的時候需要對拿到的數(shù)據(jù)進行“清洗”,比如剔除一些不可能存在的身份證號碼。查閱了網(wǎng)上的身份證號碼驗證算法,自己也總結(jié)一下。
(一)18身份證號碼的結(jié)構(gòu)
公民身份號碼是特征組合碼,由十七位數(shù)字本體碼和一位校驗碼組成。
排列順序從左至右依次為:六位數(shù)字地址碼,八位數(shù)字出生日期碼,三位數(shù)字順序碼和一位校驗碼。
1、地址碼
表示編碼對象常住戶口所在縣(市、旗、區(qū))的行政區(qū)域劃分代碼,按GB/T2260的規(guī)定執(zhí)行。
2、出生日期碼
表示編碼對象出生的年、月、日,按GB/T7408的規(guī)定執(zhí)行,年、月、日代碼之間不用分隔符。
3、順序碼
表示在同一地址碼所標識的區(qū)域范圍內(nèi),對同年、同月、同日出生的人編定的順序號,順序碼的奇數(shù)分配給男性,偶數(shù)分配給女性。
4、校驗碼計算步驟
(1)十七位數(shù)字本體碼加權(quán)求和公式
S = Sum(Ai * Wi), i = 0, ... , 16 ,先對前17位數(shù)字的權(quán)求和
Ai:表示第i位置上的身份證號碼數(shù)字值(0~9)
Wi:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 (表示第i位置上的加權(quán)因子)
(2)計算模
Y = mod(S, 11)
(3)根據(jù)模,查找得到對應(yīng)的校驗碼
Y: 0 1 2 3 4 5 6 7 8 9 10
校驗碼: 1 0 X 9 8 7 6 5 4 3 2
(二)根據(jù)17位數(shù)字本體碼獲取最后一位校驗碼程序?qū)嵗?/strong>
public class Id18 { int[] weight={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}; //十七位數(shù)字本體碼權(quán)重 char[] validate={ '1','0','X','9','8','7','6','5','4','3','2'}; //mod11,對應(yīng)校驗碼字符值 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 test=new Id18(); System.out.println("該身份證驗證碼:"+test.getValidateCode("14230219700101101")); //該身份證校驗碼:3 } }
(三)說明
1.程序可以根據(jù)已有的17位數(shù)字本體碼,獲取對應(yīng)的驗證碼。
2.該程序可以剔除驗證碼不正確的身份證號碼。
3.15位的身份證出生年份采用年份后2位,沒有最后1位校驗碼。
4.完整的身份證18位,最后一位校驗位可能是非數(shù)字。我們的一個項目,數(shù)據(jù)庫保存前17位數(shù)字,這樣對應(yīng)一些SQL語句(比如inner join)有加速作用的?。?!
相關(guān)文章
Java 異步線程監(jiān)聽與結(jié)果回調(diào)及異常捕獲總結(jié)分析
異常是程序之中導(dǎo)致程序中斷的一種指令流,異常一旦出現(xiàn)并且沒有進行合理處理的話,那么程序就將中斷執(zhí)行,這篇文章綜合介紹了異步線程監(jiān)聽與結(jié)果回調(diào)及異常捕獲2021-11-11Spring?Boot?Admin?監(jiān)控指標接入Grafana可視化的實例詳解
Spring Boot Admin2 自帶有部分監(jiān)控圖表,如圖,有線程、內(nèi)存Heap和內(nèi)存Non Heap,這篇文章主要介紹了Spring?Boot?Admin?監(jiān)控指標接入Grafana可視化,需要的朋友可以參考下2022-11-11新手小白入門必學(xué)JAVA面向?qū)ο笾鄳B(tài)
說到多態(tài),一定離不開其它兩大特性:封裝和繼承,下面這篇文章主要給大家介紹了關(guān)于新手小白入門必學(xué)JAVA面向?qū)ο笾鄳B(tài)的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-02-02