校验身份证号码是否正确

  1. 18位身份证号码各位的含义:
    1-2位省、自治区、直辖市代码;
    3-4位地级市、盟、自治州代码;
    5-6位县、县级市、区代码;
    7-14位出生年月日,比如19670401代表1967年4月1日;
    15-17位为顺序号,其中17位(倒数第二位)男为单数,女为双数;(如果是实名认证需要填入性别,可以使用填入的身份证号码校验填入的信息是否正确)
    18位为校验码,0-9和X。作为尾号的校验码,是由把前十七位数字带入统一的公式计算出来的,计算的结果是0-10,如果某人的尾号是0-9,都不会出现X,但如果尾号是10,那么就得用X来代替,因为如果用10做尾号,那么此人的身份证就变成了19位。X是罗马数字的10,用X来代替10。

// 计算最后一位校验码 本体码各位数字乘以对应加权因子并求和 除以11得到余数是校验码  idcard是身份证
		// 本体码
		String code = idcard.substring(0, 17);
		// 转换成数组
		int[] IDnums = new int[code.length()];
		for (int i = 0; i < code.length(); i++) {
			IDnums[i] = Integer.parseInt(String.valueOf(code.charAt(i)));
		}
		// 加权因子
		int[] x = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };
		// 对应字符
		char[] checkCode = { '1', '0', 'x', '9', '8', '7', '6', '5', '4', '3', '2' };
		int sum = 0;
		for (int i = 0; i < code.length(); i++) {
			int n = code.charAt(i) - 48;
			sum = sum + n * x[i];
		}
		sum = sum % 11;
		// 验证最后一位校验码和计算出来的不匹配则不同过验证
		if (!idcard.substring(17, 18).equals(String.valueOf(checkCode[sum]))) {
			return "该用户身份证号码不正确";
		}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值