java验证身份证号码

来源:互联网 发布:北京外景婚纱景点 知乎 编辑:程序博客网 时间:2024/04/28 01:22
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));}}