java版本验证_Java版本的第二代号码验证

fd2deac47fd734c13f50e115ccd3c9f3.png

importjava.text.DateFormat;

importjava.text.ParseException;

importjava.text.SimpleDateFormat;

importjava.util.Date;

importjava.util.regex.Pattern;

publicclass IdCardValidator {

public static void main(String [] args){

System.out.println(valideIdCard(“ 111111111111111111111”));

}

公共静态布尔valideIdCard(字符串idCard){

String idCardPattern =“ ^ \\ d {17}(\\ d | X)$”; //前17位是数字,后一位是数字或X

/ *

11北京

12天津市

河北省13

山西省14

15个内蒙古自治区

辽宁省21

22吉林省

ef3d56d0cfa06365a4579db3e79c5597.png

黑龙江省23

31上海

32江苏省

33浙江省

安徽省34

福建省35

江西省36

山东省37

河南省41

湖北省42

43湖南省

44广东省

广西壮族自治区45个

海南省46

50重庆市

四川省51

52贵州省

云南省53

54个西藏自治区

4c79c03cbde588ed9db39293d1ba7bf8.png

陕西省61

甘肃省62

63青海省

宁夏64个自治区

65新疆维吾尔自治区

71台湾省

81香港特别行政区

82个澳门特别行政区

* /

字符串省份=“ 11、12、13、14、15、21,22、23、31、32、33、34、35、36、37、41、42、43、44、45、46、50号校验位,51,52,53,54,61,62,63,64,65,71,81,82“;

//验证长度

if(idCard.length()!= 18){

返回假;

}

//验证格式

if(!Pattern.matches(idCardPattern,idCard)){

返回假;

}

//验证省区代码

如果(!provinces.contains(idCard.substring(0,2))){

返回假;

}

//验证年份,月份和日期

DateFormat df = new SimpleDateFormat(“ yyyyMMdd”);

尝试{

日期生日= df.parse(idCard.substring(6,14));

日期分钟= df.parse(“ 19000101”);

日期最大值= df.parse(df.format(newDate()));

if(birthday.before(min)|| Birthday.after(max)){

returnfalse;

}

} catch(ParseExceptione){

返回假;

}

//验证校验位

/ *

ID号最后一位的验证码的算法如下:

∑(a [i] * W [i])mod 11(i = 2,3,...,18)

“ *”: 表示乘法符号

i: 表示ID号每个数字的序列号,从右到左,最左侧为18,最右侧为1.

a [i]: 表示号的第i位数字

W [i]: 表示第i个位置W [i] = 2 ^(i-1)mod 11的权重值

设置: R = ∑(a [i] * W [i])mod 11(i = 2,3,...,18)

C = ID号的验证码

R和C之间的对应关系如下:

R: 0 1 2 3 4 5 6 7 8 9 10

C: 1 0 X 9 8 7 6 5 4 32

这表明X为10,罗马数字中的10为X,因此新的标准ID号可能包含非数字字母X.

* /

char残基[] = {'1'号校验位,'0','X','9','8','7','6','5','4','3',' 2'};

长期总和= 0;

for(inti = 0; i <17; i ++){

sum + = Integer.valueOf(idCard.substring(i,i + 1))*(Math.pow(2,(18-1-i)));

}

returnidCard.charAt(17)==残基[(int)(sum)];

}

}

本文来自电脑杂谈,转载请注明本文网址:

http://www.pc-fly.com/a/jisuanjixue/article-244538-1.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值