简单身份证号校验

kotlin代码:

    private fun validateIdCard(cardNo: String?): Boolean {
        cardNo ?: return false
        if (cardNo.length != 18 || !cardNo.substring(0, 17).matches(Regex("\\d{17}"))) {
            return false
        }
        // 身份证号前17位分别和下面的array中对应的值相乘之后求和
        // 然后模11之后的结果作为数组下标,去validCodes中取正确的尾号和参数中的尾号做校验接即可
        val intArr = arrayOf(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2)
        var sum = 0
        for (idx in intArr.indices) {
            sum += Character.digit(cardNo[idx], 10) * intArr[idx]
        }
        val mod = sum % 11
        val validCodes = arrayOf("1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2")
        return validCodes[mod] == cardNo.substring(cardNo.length - 1)
    }

只根据前17位算出正确的尾号来校验

猜你喜欢

转载自dreamoftch.iteye.com/blog/2392186
今日推荐