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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

身份证号检测工具

發布時間:2024/1/1 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 身份证号检测工具 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

身份證號檢測工具


問題引出:
  好幾天前樓主在刷某頭條的時候,看到一個關于身份證號逆向生成的代碼,主要就是關于最后一位校驗碼的計算。于是,好奇心驅動著我查找關于身份證號的相關信息,最終總算找到點有用的東西,所以就手動寫一個關于檢測身份證號是否合法的程序代碼。現在在這里分享出來供大家參考(本博文只提供部分關鍵代碼,完整代碼見github地址,有興趣的小伙伴可以去看看)。


身份證號知識大講堂:
  1.現在的身份證號都是18位的,每一位都有自己所代表的含義,具體如下:
    1)前1、2位數字表示:所在省份的代碼;
    2)第3、4位數字表示:所在城市的代碼;
    3)第5、6位數字表示:所在區縣的代碼;
    4)第7~14位數字表示:出生年、月、日;
    5)第15、16位數字表示:順序碼,表示在同一地址碼所標識的區域范圍內,對同年、月、日出生的人員編定的順序號;
    6)第17位數字表示性別:奇數表示男性,偶數表示女性;
    7)第18位數字是校檢碼:也有的說是個人信息碼,一般是隨計算機的隨機產生,用來檢驗身份證的正確性。校檢碼可以是0~9的數字,有時也用X表示。

  2.關于最后一位校驗碼的計算方法如下:
    1)將身份證前17位數字,分別乘于7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2并相加,得到total;
    2)將total模11,得到余數m;
    3)在數組array(1,0,X,9,8,7,6,5,4,3,2)中,用余數m作為下標取得對應的數字n;

  3.身份證的安全問題也需要大家重視,不要隨意地泄露自己的關鍵信息,尤其是自己的身份證號,被不法份子利用后,將會給自己帶來不必要的麻煩(千萬要注意這一點,技術可以不學,安全不容忽視)。


  好啦,分析就這么多,上代碼:

/*** @function 判斷身份證號最后一位的校驗碼是否合法* @return boolean [true|false] * */public boolean isCardId(){if(this.id == null || "".equals(this.id)){//當沒有初始化身份證號碼時,拋出空指針異常throw new NullPointerException();}int weight_total = 0;//累加計算后的權重總和char[] id_char_array = this.getCardIdCharArray(1, 17);//將身份證號轉換為字符數組if(this.id != null && !("".equals(this.id)) && this.id.length() == 18){ for(int i = 0; i < id_char_array.length; i++){if(!(id_char_array[i] >= '0' && id_char_array[i] <= '9')){//字符數組的前17位必須為數字,如存在一個不是數字,直接返回faslereturn false;}weight_total += Integer.parseInt(String.valueOf(id_char_array[i])) * CardIdUtil.WEIGHT[i];}int check_code_answer = weight_total % 11;//將累加計算后的權重總和和11進行取模運算if(String.valueOf(this.getCardIdCharArray(18, 18)).toUpperCase().equals(String.valueOf(CardIdUtil.CHECKCODE[check_code_answer]))){//比對指定位置校驗碼值與身份證號最后一位是否相同return true;}}return false;}/*** @function 獲取省份證號指定位置的字符數組* @param start 指定位置的開始* @param end 指定位置的結尾* @return char[]* */public char[] getCardIdCharArray(int start, int end){if(this.id == null || "".equals(this.id)){//當沒有初始化身份證號碼時,拋出空指針異常throw new NullPointerException();}if(start <= 0 || end > 18){//當指定位置不存在時,拋出數組越界異常throw new ArrayIndexOutOfBoundsException();}String id_char_array = "";char[] temp = this.id.toCharArray();for(int i = start - 1; i <= end - 1; i++){id_char_array += temp[i];}return id_char_array.toCharArray();}

  以上就是樓主寫的關于檢測身份證號是否合法的工具類中的部分代碼,但要實際使用缺少一個關于”地區代碼和實際地區”的映射文件,這里就不提供了,但可以去樓主給github地址去下載(剛開張,歡迎光顧,話說github上傳文件好難啊QAQ!)。  


github地址:
樓主的github

特此聲明: 本博文及代碼地址僅做技術交流,擅自違法使用而造成的不良后果均與本人無關。


本次學習尚未掌握的知識(繼續挖坑):
  1)大文件讀取的速度問題需要優化,好像可以將大文件分成若干個小文件,然后利用多線程讀取,來提高查找速度,以后來試試。
  

總結

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

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