永居证校验

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class YongJuZhengJiaoYan {

private static final String[][] province = {{"北京", "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"}};
private static final String[][] country = {{"阿富汗", "004"}, {"奥兰群岛", "248"}, {"阿尔巴尼亚", "008"}, {"阿尔及利亚", "012"},
{"美属萨摩亚", "016"}, {"安道尔", "020"}, {"安哥拉", "024"}, {"安圭拉", "660"}, {"南极洲", "010"}, {"安提瓜和巴布达", "028"},
{"阿根廷", "032"}, {"亚美尼亚", "051"}, {"阿鲁巴", "533"}, {"澳大利亚", "036"}, {"奥地利", "040"}, {"阿塞拜疆", "031"},
{"巴哈马", "044"}, {"巴林", "048"}, {"孟加拉国", "050"}, {"巴巴多斯", "052"}, {"白俄罗斯", "112"}, {"比利时", "056"},
{"伯利兹", "084"}, {"贝宁", "204"}, {"百慕大", "060"}, {"不丹", "064"}, {"玻利维亚", "068"}, {"波黑", "070"},
{"博茨瓦纳", "072"}, {"布维岛", "074"}, {"巴西", "076"}, {"英属印度洋领地", "086"}, {"文莱", "096"}, {"保加利亚", "100"},
{"布基纳法索", "854"}, {"布隆迪", "108"}, {"柬埔寨", "116"}, {"喀麦隆", "120"}, {"加拿大", "124"}, {"佛得角", "132"},
{"开曼群岛", "136"}, {"中非", "140"}, {"乍得", "148"}, {"智利", "152"}, {"中国", "156"}, {"圣诞岛", "162"},
{"科科斯(基林岛)", "166"}, {"哥伦比亚", "170"}, {"科摩罗", "174"}, {"刚果(布)", "178"}, {"刚果(金)", "180"}, {"库克群岛", "184"},
{"哥斯达黎加", "188"}, {"科特迪瓦", "384"}, {"克罗地亚", "191"}, {"古巴", "192"}, {"塞浦路斯", "196"}, {"捷克", "203"},
{"丹麦", "208"}, {"吉布提", "262"}, {"多米尼克", "212"}, {"多米尼加", "214"}, {"厄瓜多尔", "218"}, {"埃及", "818"},
{"萨尔瓦多", "222"}, {"赤道几内亚", "226"}, {"厄立特里亚", "232"}, {"爱沙尼亚", "233"}, {"埃塞俄比亚", "231"},
{"福克兰群岛(马尔维纳)", "238"}, {"法罗群岛", "234"}, {"斐济", "242"}, {"芬兰", "246"}, {"法国", "250"}, {"法属圭亚那", "254"},
{"法属波利尼西", "258"}, {"法属南部领地", "260"}, {"加蓬", "266"}, {"冈比亚", "270"}, {"格鲁吉亚", "268"}, {"德国", "276"},
{"加纳", "288"}, {"直布罗陀", "292"}, {"希腊", "300"}, {"格陵兰", "304"}, {"格林纳达", "308"}, {"瓜德罗普", "312"},
{"关岛", "316"}, {"危地马拉", "320"}, {"格恩西岛", "831"}, {"几内亚", "324"}, {"几内亚比绍", "624"}, {"圭亚那", "328"},
{"海地", "332"}, {"赫德岛和麦克唐纳岛", "334"}, {"梵蒂冈", "336"}, {"洪都拉斯", "340"}, {"中国香港", "344"}, {"牙利", "348"},
{"冰岛", "352"}, {"印度", "356"}, {"印度尼西亚", "360"}, {"伊", "364"}, {"伊拉克", "368"}, {"爱尔兰", "372"},
{"英国属地曼岛", "833"}, {"以色列", "376"}, {"意大利", "380"}, {"牙买加", "388"}, {"日本", "392"}, {"泽西岛", "832"},
{"约旦", "400"}, {"哈萨克斯坦", "398"}, {"肯尼亚", "404"}, {"基里巴斯", "296"}, {"朝鲜", "408"}, {"韩国", "410"},
{"科威特", "414"}, {"吉尔吉斯斯坦", "417"}, {"老挝", "418"}, {"拉脱维亚", "428"}, {"黎巴嫩", "422"}, {"莱索托", "426"},
{"利比里亚", "430"}, {"利比亚", "434"}, {"列支敦士登", "438"}, {"立陶宛", "440"}, {"卢森堡", "442"}, {"中国澳门", "446"},
{"前南马其顿", "807"}, {"马达加斯加", "450"}, {"马拉维", "454"}, {"马来西亚", "458"}, {"马尔代夫", "462"}, {"马里", "466"},
{"马耳他", "470"}, {"马绍尔群岛", "584"}, {"马提尼克", "474"}, {"毛利塔尼亚", "478"}, {"毛里求斯", "480"}, {"马约特", "175"},
{"墨西哥", "484"}, {"密克罗尼西亚联邦", "583"}, {"摩尔多瓦", "498"}, {"摩纳哥", "492"}, {"蒙古", "496"}, {"黑山", "499"},
{"蒙特塞拉特", "500"}, {"摩洛哥", "504"}, {"莫桑比克", "508"}, {"缅甸", "104"}, {"纳米比亚", "516"}, {"瑙鲁", "520"},
{"尼泊尔", "524"}, {"荷兰", "528"}, {"荷属安的列斯", "530"}, {"新喀里多尼亚", "540"}, {"新西兰", "554"}, {"尼加拉瓜", "558"},
{"尼日尔", "562"}, {"尼日利亚", "566"}, {"纽埃", "570"}, {"诺福克岛", "574"}, {"北马里亚纳", "580"}, {"挪威", "578"},
{"阿曼", "512"}, {"巴基斯坦", "586"}, {"帕劳", "585"}, {"巴勒斯坦", "275"}, {"巴拿马", "591"}, {"巴布亚新几内亚", "598"},
{"巴拉圭", "600"}, {"秘鲁", "604"}, {"菲律宾", "608"}, {"皮特凯恩", "612"}, {"波兰", "616"}, {"葡萄牙", "620"},
{"波多黎各", "630"}, {"卡塔尔", "634"}, {"留尼汪", "638"}, {"罗马尼亚", "642"}, {"俄罗斯联邦", "643"}, {"卢旺达", "646"},
{"圣赫勒拿", "654"}, {"圣基茨和尼维斯", "659"}, {"圣卢西亚", "662"}, {"圣皮埃尔和密克隆", "666"}, {"圣文森特和格林纳丁斯", "670"},
{"萨摩亚", "882"}, {"圣马力诺", "674"}, {"圣多美和普林西比", "678"}, {"沙特阿拉伯", "682"}, {"塞内加尔", "686"},
{"塞尔维亚", "688"}, {"塞舌尔", "690"}, {"塞拉利昂", "694"}, {"新加坡", "702"}, {"斯洛伐克", "703"}, {"斯洛文尼亚", "705"},
{"所罗门群岛", "090"}, {"索马里", "706"}, {"南非", "710"}, {"南乔治亚岛和南桑德韦奇岛", "239"}, {"西班牙", "724"},
{"斯里兰卡", "144"}, {"苏丹", "736"}, {"苏里南", "740"}, {"斯瓦尔巴岛和扬马延岛", "744"}, {"斯威士兰", "748"}, {"瑞典", "752"},
{"瑞士", "756"}, {"叙利亚", "760"}, {"中国台湾", "158"}, {"塔吉克斯坦", "762"}, {"坦桑尼亚", "834"}, {"泰国", "764"},
{"东帝汶", "626"}, {"多哥", "768"}, {"托克劳", "772"}, {"汤加", "776"}, {"特立尼达和多巴哥", "780"}, {"突尼斯", "788"},
{"土耳其", "792"}, {"土库曼斯坦", "795"}, {"特克斯和凯科斯群岛", "796"}, {"图瓦卢", "798"}, {"乌干达", "800"}, {"乌克兰", "804"},
{"阿联", "784"}, {"英国", "826"}, {"美国", "840"}, {"美国本土外小岛屿", "581"}, {"乌拉圭", "858"}, {"乌兹别克斯坦", "860"},
{"瓦努阿图", "548"}, {"委内瑞拉", "862"}, {"越南", "704"}, {"英属维尔京群岛", "092"}, {"美属维尔京群岛", "850"},
{"瓦利斯和富图纳", "876"}, {"西撒哈拉", "732"}, {"也门", "887"}, {"赞比亚", "894"}, {"津巴布韦", "716"}};

private static Map<String, String> provinceMap = arrayToMap(province);
private static Map<String, String> countryMap = arrayToMap(country);

public static void main(String[] args) {
String idNumber = "931586198001010028";
System.out.println(checkIDNumber(idNumber));
}

public static boolean checkIDNumber(String idNumber) {
if (idNumber == null || idNumber.length() != 18) {
return false;
}
if (!idNumber.matches("\\d{17}(\\d|X)$")) {
return false;
}

String wgrType = idNumber.substring(0, 1);
if ("9".equals(wgrType)) {
String provinceType = idNumber.substring(1, 3);
String countryType = idNumber.substring(3, 6);
String birthDate = idNumber.substring(6, 14);
char checkCode = idNumber.charAt(17);
if ("".equals(provinceMap.get(provinceType))) {
System.out.println("受理地区不匹配");
return false;
}
if ("".equals(countryMap.get(countryType))) {
System.out.println("国家地区不匹配");
return false;
}
Date date = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
try {
simpleDateFormat.parse(birthDate);
} catch (ParseException e) {
System.out.println("出生日期不匹配");
return false;
}
String checkCodes = "10X98765432";
int checkSum = 0;
List<Integer> list = new ArrayList<Integer>();
Pattern pattern = Pattern.compile("\\d+");
for (int i = 0; i < 17; i++) {
Matcher m =
pattern.matcher(idNumber.substring(i, i + 1));
while(m.find()){
String num = m.group();
list.add(Integer.parseInt(num));
}
}
Integer[] array = Arrays.copyOf(list.toArray(new Integer[0]), list.size());
if (array.length!= 17){
System.out.println("位数不匹配");
return false;
}
checkSum = array[0] * 7 + array[1] * 9 + array[2] * 10 + array[3] * 5 + array[4] * 8 +
array[5] * 4 + array[6] * 2 + array[7] * 1 + array[8] * 6 + array[9] * 3 +
array[10] * 7 + array[11] * 9 + array[12] * 10 + array[13] * 5 + array[14] * 8 +
array[15] * 4 + array[16] * 2;
return checkCode == checkCodes.charAt(checkSum % 11);
} else {
return false;
}

}

public static Map<String, String> arrayToMap(String[][] array) {
Map<String, String> map = new HashMap<>();
for (String[] item : array) {
map.put(item[0], item[1]);
}
return map;
}
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值