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位算出正确的尾号来校验