18位身份证验证

package Runable_Test;


import java.math.BigInteger;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class ID_JYM {


public static void main(String[] args) {
// TODO Auto-generated method stub
// 详细请正则表达式参照:https://zhidao.baidu.com/question/493151729855271292.html
// 该正则表达式可确定到省份;
String reg_id = "(\\d{17}[0-9a-zA-Z])";
Pattern idNumPattern = Pattern.compile(reg_id);


Scanner sc = new Scanner(System.in);
System.out.println("输入18位身份证号:");
String id = sc.next();
Matcher idNumMatcher = idNumPattern.matcher(id);
if (idNumMatcher.matches()) {
int[] arr = new int[17];
// 身份证前17位
for (int i = 0; i < arr.length; i++) {
String id_ys = id.toString().substring(i, (i + 1));
arr[i] = Integer.parseInt(id_ys.toString());
System.out.print(arr[i] + "\t");
}
String str_jyw = id.substring((id.length() - 1));
// 身份证最后一位
System.out.println(str_jyw);


int id_count = arr[0] * 7 + arr[1] * 9 + arr[2] * 10 + arr[3] * 5 + arr[4] * 8 + arr[5] * 4 + arr[6] * 2
+ arr[7] * 1 + arr[8] * 6 + arr[9] * 3 + arr[10] * 7 + arr[11] * 9 + arr[12] * 10 + arr[13] * 5
+ arr[14] * 8 + arr[15] * 4 + arr[16] * 2;
int id_yusu = id_count % 11;
String jyw = null;
switch (id_yusu) {
case 0:
jyw = "1";
break;
case 1:
jyw = "0";
break;
case 2:
jyw = "X";
break;
case 3:
jyw = "9";
break;
case 4:
jyw = "8";
break;
case 5:
jyw = "7";
break;
case 6:
jyw = "6";
break;
case 7:
jyw = "5";
break;
case 8:
jyw = "4";
break;
case 9:
jyw = "3";
break;
case 10:
jyw = "2";
break;
}
System.out.println("");
System.out.println("最后一位校验码是:" + jyw);
// 忽略大小写的验证
if (jyw.equalsIgnoreCase(str_jyw)) {
System.out.println("校验完成,输入正确");
} else {
System.out.println("身份证号输入有误---1!!!");
}
} else {
System.out.println("身份证号输入有误---2!!!");
}
}


}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值