java验证身份证号码
2013-05-21 10:27
447 查看
import java.util.Calendar; import java.util.HashMap; import java.util.Map; /** * 身份证号码验证工具类 * @author zhengchubin * @date 2013-5-20 下午7:24:46 */ public class IdcardUtil { final static Map<Integer, String> zoneNum = new HashMap<Integer, String>(); static { zoneNum.put(11, "北京"); zoneNum.put(12, "天津"); zoneNum.put(13, "河北"); zoneNum.put(14, "山西"); zoneNum.put(15, "内蒙古"); zoneNum.put(21, "辽宁"); zoneNum.put(22, "吉林"); zoneNum.put(23, "黑龙江"); zoneNum.put(31, "上海"); zoneNum.put(32, "江苏"); zoneNum.put(33, "浙江"); zoneNum.put(34, "安徽"); zoneNum.put(35, "福建"); zoneNum.put(36, "江西"); zoneNum.put(37, "山东"); zoneNum.put(41, "河南"); zoneNum.put(42, "湖北"); zoneNum.put(43, "湖南"); zoneNum.put(44, "广东"); zoneNum.put(45, "广西"); zoneNum.put(46, "海南"); zoneNum.put(50, "重庆"); zoneNum.put(51, "四川"); zoneNum.put(52, "贵州"); zoneNum.put(53, "云南"); zoneNum.put(54, "西藏"); zoneNum.put(61, "陕西"); zoneNum.put(62, "甘肃"); zoneNum.put(63, "青海"); zoneNum.put(64, "新疆"); zoneNum.put(71, "台湾"); zoneNum.put(81, "香港"); zoneNum.put(82, "澳门"); zoneNum.put(91, "外国"); } final static int[] PARITYBIT = {'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'}; final static int[] POWER_LIST = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2}; /** * * 身份证验证 * *@param s * 号码内容 *@return 是否有效 null和"" 都是false */ public static boolean isIdcard(String s){ if(s == null || (s.length() != 15 && s.length() != 18)) return false; //校验区位码 if(!zoneNum.containsKey(Integer.valueOf(s.substring(0,2)))){ return false; } //校验年份 String year = s.length() == 15 ? "19" + s.substring(6,8) :s .substring(6, 10); final int iyear = Integer.parseInt(year); if(iyear < 1900 || iyear > Calendar.getInstance().get(Calendar.YEAR)) return false;//1900年的PASS,超过今年的PASS //校验月份 String month = s.length() == 15 ? s.substring(8, 10) : s.substring(10,12); final int imonth = Integer.parseInt(month); if(imonth <1 || imonth >12){ return false; } //校验天数 String day = s.length() ==15 ? s.substring(10, 12) : s.substring(12, 14); final int iday = Integer.parseInt(day); if(iday < 1 || iday > 31) return false; //校验一个合法的年月日 if(!validate(iyear, imonth, iday)) return false; //校验"校验码" if(s.length() == 15) return true; return true; } static boolean validate(int year, int imonth, int iday){ //比如考虑闰月,大小月等 return true; } public static void main(String[] args) { final String s = "445224199112111x"; System.out.println(s+" --> "+isIdcard(s)); } }
相关文章推荐
- Java实现身份证号码验证源码分享
- JAVA 身份证号码验证工具(省份、性别、生肖、星座)
- java验证身份证号码是否有效源代码
- Java 身份证号码验证程序
- Java Util 验证身份证号码是否规范
- JAVA 身份证号码验证工具(省份、性别、生肖、星座)
- Android 、Java 验证二代身份证号码是否正确
- java算法之身份证号码验证
- 【全】JAVA 身份证号码验证工具(省份、性别、生肖、星座)
- JAVA 身份证号码有效性验证
- java实现—身份证号码验证
- Java 验证 身份证号码是否规范
- java验证身份证号码及编码规则和提取相应信息
- java验证身份证号码
- Java实现身份证号码的验证,JAVA后台验证身份证号码
- java代码验证身份证号码经典版
- Java代码验证18位身份证号码是不是真的
- JAVA、JS中验证身份证号码、手机号码、电子邮箱的正则表达式
- Java 验证 身份证号码是否规范
- java验证身份证号码是否有效源代码