保存一個(gè)Andorid用身份證號(hào)碼校驗(yàn)工具類

身份證最后一位校驗(yàn)碼計(jì)算規(guī)則:

1.將前面的身份證號(hào)碼17位數(shù)分別乘以不同的系數(shù)耕腾。從第一位到第十七位的系數(shù)分別為:7. 9 .10.5. 8. 4. 2. 1. 6. 3. 7. 9. 10. 5. 8. 4. 2.
2.將這17位數(shù)字和系數(shù)相乘的結(jié)果相加哩盲。
3.用加出來和除以11皆愉,看余數(shù)是多少?
4余數(shù)只可能有0 避乏、1胳蛮、 2、 3溉苛、 4、 5弄诲、 6愚战、 7、 8齐遵、 9寂玲、 10這11個(gè)數(shù)字。其分別對(duì)應(yīng)的最后一位身份證的號(hào)碼為1 .0. X. 9. 8. 7. 6. 5. 4. 3. 2.梗摇。
5.通過上面得知如果余數(shù)是2拓哟,就會(huì)在身份證的第18位數(shù)字上出現(xiàn)羅馬數(shù)字的Ⅹ。如果余數(shù)是10伶授,身份證的最后一位號(hào)碼就是2断序。
身份證號(hào)碼倒數(shù)第二位是用來表示性別的(奇數(shù)為男性,偶數(shù)為女性)
例如:某男性的身份證號(hào)碼是34052419800101001X流纹。我們要看看這個(gè)身份證是不是合法的身份證。
首先:我們得出违诗,前17位的乘積和是189
然后:用189除以11得出的結(jié)果是17 + 2/11漱凝,也就是說余數(shù)是2。
最后:通過對(duì)應(yīng)規(guī)則就可以知道余數(shù)2對(duì)應(yīng)的數(shù)字是x诸迟。所以茸炒,這是一個(gè)合格的身份證號(hào)碼

工具類代碼:

import android.support.v4.util.SimpleArrayMap;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;

/**
 * create by : Jarry Leo
 * date : 2018/8/15 16:47
 */
public class IdCardValidate {

    /**
     * 檢查身份證號(hào)碼是否合法
     *
     * @param id 身份證號(hào)碼
     * @return 檢查結(jié)果
     */
    public static boolean check(String id) {
        return checkLength(id) &&
                checkNumber(id) &&
                checkLastCode(id) &&
                checkDate(id) &&
                checkAreaCode(id);
    }

    //檢查長(zhǎng)度
    private static boolean checkLength(String id) {
        return id.length() == 18;
    }

    //檢查數(shù)字
    private static boolean checkNumber(String id) {
        String reg = "^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}([0-9Xx])$";
        return id.matches(reg);
    }

    //檢查校驗(yàn)碼
    private static boolean checkLastCode(String id) {
        String[] valCodeArr = {"1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"};
        String[] wi = {"7", "9", "10", "5", "8", "4", "2", "1",
                "6", "3", "7", "9", "10", "5", "8", "4", "2"};
        int sum = 0;
        for (int i = 0; i < wi.length; i++) {
            sum = sum + Integer.parseInt(String.valueOf(id.charAt(i)))
                    * Integer.parseInt(wi[i]);
        }
        int modValue = sum % 11;
        return valCodeArr[modValue].equals(id.substring(17));
    }

    //檢查地區(qū)碼
    private static boolean checkAreaCode(String id) {
        SimpleArrayMap<String, String> map = new SimpleArrayMap<>();
        map.put("11", "北京");
        map.put("12", "天津");
        map.put("13", "河北");
        map.put("14", "山西");
        map.put("15", "內(nèi)蒙古");
        map.put("21", "遼寧");
        map.put("22", "吉林");
        map.put("23", "黑龍江");
        map.put("31", "上海");
        map.put("32", "江蘇");
        map.put("33", "浙江");
        map.put("34", "安徽");
        map.put("35", "福建");
        map.put("36", "江西");
        map.put("37", "山東");
        map.put("41", "河南");
        map.put("42", "湖北");
        map.put("43", "湖南");
        map.put("44", "廣東");
        map.put("45", "廣西");
        map.put("46", "海南");
        map.put("50", "重慶");
        map.put("51", "四川");
        map.put("52", "貴州");
        map.put("53", "云南");
        map.put("54", "西藏");
        map.put("61", "陜西");
        map.put("62", "甘肅");
        map.put("63", "青海");
        map.put("64", "寧夏");
        map.put("65", "新疆");
        map.put("71", "臺(tái)灣");
        map.put("81", "香港");
        map.put("82", "澳門");
        map.put("91", "國(guó)外");
        return map.containsKey(id.substring(0, 2));
    }

    //檢查日期
    private static boolean checkDate(String id) {
        String strYear = id.substring(6, 10);// 年份
        String strMonth = id.substring(10, 12);// 月份
        String strDay = id.substring(12, 14);// 日期
        String date = strYear + "-" + strMonth + "-" + strDay;
        SimpleDateFormat simpleDateFormat =
                new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());
        try {
            Calendar calendar = Calendar.getInstance();
            Date parse = simpleDateFormat.parse(date);
            boolean after = calendar.getTime().after(parse);
            calendar.add(Calendar.YEAR, -150);
            boolean before = calendar.getTime().before(parse);
            return after && before;
        } catch (ParseException e) {
            return false;
        }
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市阵苇,隨后出現(xiàn)的幾起案子壁公,更是在濱河造成了極大的恐慌,老刑警劉巖绅项,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件紊册,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡趁怔,警方通過查閱死者的電腦和手機(jī)湿硝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來润努,“玉大人关斜,你說我怎么就攤上這事∑探剑” “怎么了痢畜?”我有些...
    開封第一講書人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)鳍侣。 經(jīng)常有香客問我丁稀,道長(zhǎng),這世上最難降的妖魔是什么倚聚? 我笑而不...
    開封第一講書人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任线衫,我火速辦了婚禮,結(jié)果婚禮上惑折,老公的妹妹穿的比我還像新娘授账。我一直安慰自己,他們只是感情好惨驶,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開白布白热。 她就那樣靜靜地躺著,像睡著了一般粗卜。 火紅的嫁衣襯著肌膚如雪屋确。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,182評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音攻臀,去河邊找鬼焕数。 笑死,一個(gè)胖子當(dāng)著我的面吹牛茵烈,可吹牛的內(nèi)容都是我干的百匆。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼呜投,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了存璃?” 一聲冷哼從身側(cè)響起仑荐,我...
    開封第一講書人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎纵东,沒想到半個(gè)月后粘招,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡偎球,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年洒扎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片衰絮。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡袍冷,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出猫牡,到底是詐尸還是另有隱情胡诗,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布淌友,位于F島的核電站煌恢,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏震庭。R本人自食惡果不足惜瑰抵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望器联。 院中可真熱鬧二汛,春花似錦、人聲如沸主籍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽千元。三九已至苫昌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間幸海,已是汗流浹背祟身。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工奥务, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人袜硫。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓氯葬,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親婉陷。 傳聞我的和親對(duì)象是個(gè)殘疾皇子帚称,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 為什么有的人身份證最后一位的號(hào)碼是0、1或2秽澳、3闯睹、4、5担神、6楼吃、7、8妄讯、9或X孩锡,而有的人是X這是怎么回事的呢,又有多...
    吳富良閱讀 7,492評(píng)論 0 1
  • 計(jì)算方法 ( 百度百科 ) 將前面的身份證號(hào)碼17位數(shù)分別乘以不同的系數(shù)亥贸。從第一位到第十七位的系數(shù)分別為:7-9...
    尹_路人閱讀 1,370評(píng)論 2 0
  • 開發(fā)過程中多多少少都會(huì)碰到身份證號(hào)碼躬窜,今天在做項(xiàng)目的時(shí)候,碰到了對(duì)對(duì)15位砌函、18位身份證號(hào)碼進(jìn)行校驗(yàn)斩披,借此機(jī)會(huì)在網(wǎng)...
    追夢(mèng)小樂閱讀 2,409評(píng)論 1 60
  • 這是日本人寫的一本不厚的書垦沉,差不多100多頁(yè),這本書可以說是通俗易懂仍劈。使用很簡(jiǎn)單的說法厕倍,把復(fù)雜轉(zhuǎn)化為簡(jiǎn)單。一流投資...
    吳黃龍本人閱讀 436評(píng)論 0 0
  • 亞洲權(quán)威風(fēng)水命理大師 集易學(xué)之大成者贩疙、民間易學(xué)雜家第一人讹弯,融通古今,兼?zhèn)鋬?nèi)外这溅! 章騏山老師组民,道名羅易,正一道張?zhí)鞄?..
    黃宣瑞閱讀 8,716評(píng)論 0 0