Java驗證身份證號是否合法

    /**
     * Java驗證身份證號是否合法
     * @param idCard
     * @return
     */
    public boolean validateIdCard(String idCard) {
        // 對身份證號進行長度等簡單判斷
        if(StringUtils.isEmpty(idCard)
                || idCard.length() != 18
                || !idCard.matches("\\d{17}[0-9X]")
                ){
            return false;
        }
        
        // 1-17位相乘因子數組
        int[] w = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };
        // 計算1-17位與相應因子乘積之和
        char[] c = idCard.toCharArray();
        int sum = 0;
        for (int i = 0; i < w.length; i++) {
            sum += (c[i] - '0') * w[i];
        }
        // 18位隨機碼數組
        char[] verifyCode = "10X98765432".toCharArray();
        char ch = verifyCode[sum % 11];
        
        // 判斷隨機碼是否相等
        if(c[17] == ch){
            return true;
        }else{
            return false;
        }
    }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章