public class IDCard { /** * 17位奇数男,偶数女,15,16,17随机,18位算出来的 */ private static final String ss = ""; //第18位校验码 private static final String[]v18 = { "1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"}; //加权因子--7,9,10,5,8,4,2,1,6,3循环 private static final int[] params = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}; private static Map<String, String> cityCodes = new HashMap<String, String>(); public static void init(){ cityCodes.put("11", "北京"); cityCodes.put("12", "天津"); cityCodes.put("13", "河北"); cityCodes.put("14", "山西"); cityCodes.put("15", "内蒙古"); cityCodes.put("21", "辽宁"); cityCodes.put("22", "吉林"); cityCodes.put("23", "黑龙江"); cityCodes.put("31", "上海"); cityCodes.put("32", "江苏"); cityCodes.put("33", "浙江"); cityCodes.put("34", "安徽"); cityCodes.put("35", "福建"); cityCodes.put("36", "江西"); cityCodes.put("37", "山东"); cityCodes.put("41", "河南"); cityCodes.put("42", "湖北"); cityCodes.put("43", "湖南"); cityCodes.put("44", "广东"); cityCodes.put("45", "广西"); cityCodes.put("46", "海南"); cityCodes.put("50", "重庆"); cityCodes.put("51", "四川"); cityCodes.put("52", "贵州"); cityCodes.put("53", "云南"); cityCodes.put("54", "西藏"); cityCodes.put("61", "陕西"); cityCodes.put("62", "甘肃"); cityCodes.put("63", "青海"); cityCodes.put("64", "宁夏"); cityCodes.put("65", "新疆"); cityCodes.put("71", "台湾"); cityCodes.put("81", "香港"); cityCodes.put("82", "澳门"); cityCodes.put("91", "国外"); } public static boolean verify(String idcard){ String pre17=idcard.substring(0, 17); char[] c17 = pre17.toCharArray(); int sum = 0; for (int i = 0; i < c17.length; i++) { int c = Character.getNumericValue(c17[i]); int p = params[i]; sum+=c*p; } int a = sum%11; if(a==2){//字母 }else {//数字 } String last_v=v18[a]; System.out.println(last_v); return last_v.equals(idcard.charAt(17)+""); } public static void main(String[] args) { String idcard = "110203199001231238"; System.out.println(verify(idcard)); } }