身份证号的校检代码

 
'================================计算身份证第18位校检码

Public Type AboutIdCard
    Place   As String     '地区
    Sex   As String     '性别
    Birthday   As Date     '生日
    sErrInfo   As String     '错误信息
End Type

Public Function GetPersonInfo(CodePath As String, idcard As String, BackInfo As AboutIdCard) As String
    '根据〖中华人民共和国国家标准   GB   11643-1999〗中有关公民身份号码的规定,
    '公民身份号码是特征组合码18位:由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。
    '地址码表示编码对象常住户口所在县(市、旗、区)的行政区划代码。生日期码表示编码对象出生的年、月、日,其中年份用四位数字表示,年、月、日之间不用分隔符。顺序码表示同一地址码所标识的区域范围内,对同年、月、日出生的人员编定的顺序号。顺序码的奇数分给男性,偶数分给女性。
    '15位:六位数字地址码,六位数字出生日期码,三位数字顺序码和一位数字校验码。
    On Error GoTo Err:

    Dim PlaceCode     As String
    Dim strPlace     As String
    Dim strCode     As String
    Dim sDate     As String
    Dim FileNumber     As Long

    GetPersonInfo = ""
    BackInfo.sErrInfo = ""
    If Len(idcard) <> 15 And Len(idcard) <> 18 Then
        BackInfo.sErrInfo = "身份证长度错误"
    End If
    '判断日期/转换成为日期,出错跳转
    If Len(idcard) = 15 Then
        sDate = Mid(idcard, 7, 2) & "-" & Mid(idcard, 9, 2) & "-" & Mid(idcard, 11, 2)
        BackInfo.Birthday = Format(sDate, "yyyy-mm-dd")
        If CLng(Mid(idcard, 13, 3)) Mod 2 = 0 Then                   '取得性别
            BackInfo.Sex = "女"
        Else
            BackInfo.Sex = "男"
        End If
    Else
        sDate = Mid(idcard, 7, 4) & "-" & Mid(idcard, 11, 2) & "-" & Mid(idcard, 13, 2)
        BackInfo.Birthday = sDate
        If CLng(Mid(idcard, 15, 3)) Mod 2 = 0 Then                   '取得性别
            BackInfo.Sex = "女"
        Else
            BackInfo.Sex = "男"
        End If
    End If
    PlaceCode = Mi

在Java中,身份证号码通常需要查其长度、数字位数以及验码是否符合规则。以下是一个简单的Java方法,用于验证中国大陆居民身份证号码: ```java public class IDCardValidator { private static final String[] checkCodeTable = { "10X", "97X", "96X", "95X", "94X", "93X", "92X", "91X", "8X", "7X", "6X", "5X", "4X", "3X", "2X", "101", "100", "99X", "98X", "971", "962", "953", "944", "935", "926", "917", "8X0", "8X1", "8X2", "8X3", "8X4", "8X5", "8X6", "8X7", "8X8", "8X9", "7X2", "7X3", "7X4", "7X5", "7X6", "7X7", "7X8", "7X9", "6X1", "6X0", "5X1", "5X0", "4X1", "4X0", "3X1", "3X0", "2X1", "2X0", "10X", "101", "100", "99X", "98X", "971", "962", "953", "944", "935", "926", "917", "8X1", "8X0", "7X9", "7X8", "7X7", "7X6", "7X5", "7X4", "7X3", "7X2", "6X3", "6X2", "6X1", "6X0", "5X3", "5X2", "5X1", "5X0", "4X3", "4X2", "4X1", "4X0", "3X3", "3X2", "3X1", "3X0", "2X3", "2X2", "2X1", "2X0" }; public boolean validateIDCard(String id) { if (id == null || id.length() != 18) { return false; } // 查前17位数字是否都是数字 for (int i = 0; i < 17; i++) { char c = id.charAt(i); if (!Character.isDigit(c)) { return false; } } // 验证第18验码 int sum = 0; for (int i = 0; i <= 16; i++) { int factor = i + 1; int digit = Character.getNumericValue(id.charAt(i)); if (i % 2 == 0) { // 偶数位置加权因子为奇数 sum += factor * digit; } else { // 奇数位置加权因子为偶数 sum += factor * digit * 2; } } int remainder = sum % 11; String checkCode = checkCodeTable[remainder]; return id.charAt(17).equals(checkCode.charAt(0)); // 对比第18位字符是否匹配 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值