zoukankan      html  css  js  c++  java
  • java对身份证验证及正则表达式解析

    原文地址:http://www.cnblogs.com/zhongshengzhen/

    java对身份证验证及正则表达式解析

    package service;
    
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.regex.Pattern;
    import org.junit.Test;
    
    public class TestRegex {
        public static boolean isChineseName(String realname){
             return Pattern.matches("[u4e00-u9fa5|·]{2,15}",realname);
        }
        public static boolean isCardId(String cardid){
             return Pattern.matches("^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([\d|x|X]{1})$", cardid);
        }
        public static String[] randomArray(int length){
            int index = 0;
            String temp = ",";
            for(int ii=0;ii<1000;ii++){
                for(int i=0;i<length;i++){
                    index = (int) (Math.random()*10);
                    temp += ( index + "");
                }
                temp +=",";
            }
            return temp.split(",");
        }
        //身份证前1位每位加权因子 
        private static int[] power = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
        //身份证第18位校检码
        private static String[] refNumber ={"1", "0", "X", "9", "8", "7", "6", "5", "4", "3"};
        //省(直辖市)代码表
        private String provinceCode[] = { "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", "91" };
        /**
         * 检查身份证的省份信息是否正确(使用与18/15位身份证)
         * @param provinceid
         * @return
         */
        public boolean checkProvinceId(String provinceid){
            for (String id : provinceCode) {
                if (id.equals(provinceid)) {   
                    return true; 
                }
            }   
            return false;
        }
        /**
         * 校验身份证第18位是否正确(只适合18位身份证)
         * @param cardId
         * @return
         */
        public static boolean checkCardIdLastNum(String cardId){
            if(cardId.length() != 18){
                return false;
            }
            char[] tmp = cardId.toCharArray();
            int[] cardidArray = new int[tmp.length-1];
            int i=0;
            for(i=0;i<tmp.length-1;i++){
                cardidArray[i] = Integer.parseInt(tmp[i]+"");
            }
            String checkCode = sumPower(cardidArray);
            String lastNum = tmp[tmp.length-1] + "";
            if(lastNum.equals("x")){
                lastNum = lastNum.toUpperCase();
            }
            if(!checkCode.equals(lastNum)){
                return false;
            }
            return true;
        }
        /**
         * 计算身份证的第十八位校验码
         * @param cardidArray
         * @return
         */
        public static String sumPower(int[] cardidArray){
            int result = 0;
            for(int i=0;i<power.length;i++){
                result += power[i] * cardidArray[i];
            }
            return refNumber[(result%11)];
        }
        /**
         * 判断日期是否有效
         * @param inDate
         * @return
         */
         public boolean isValidDate(String inDate) {
            if (inDate == null){
              return false;
            }
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
            if (inDate.trim().length() != dateFormat.toPattern().length()){
                  return false;    
            }
            dateFormat.setLenient(false);//严格的日期匹配
            try {
                dateFormat.parse(inDate.trim());
            } catch (ParseException e) {
                return false;
            }
            return true;
        }
        //@Test
        public void testName(){
            String[] array = {"钟·","在哪"};
            for(int i=0;i<array.length;i++){
                System.out.println(array[i]+":"+isChineseName(array[i]));
            }
        }
        //   
        //@Test
        public void testCardId(){
            String[] array = randomArray(18);
            int index = 0,sum =0;
            for(int i=0;i<array.length;i++){
                sum += 1;
                if(isCardId(array[i])){
                    index += 1;
                }
                System.out.println(array[i]+":"+isCardId(array[i]));
            }
            double ret = index/sum;
            System.out.println(index+","+sum+","+ret);
        }
        //@Test
        public void testArray(){
            String[] array = randomArray(15);
            for(int i=0;i<array.length;i++){
                System.out.println(array[i]);
            }
        }
        //@Test
        public void testLastNum(){
            String[] cardId = {"440982199563272359","43010219890414298x"};
            for(int i=0;i<cardId.length;i++){
                System.out.println(cardId[i]+":"+checkCardIdLastNum(cardId[i]));
            }
        }
        //@Test
        public void testProcince(){
            String[] cardId = {"440982199563272359","43010219890414298x"};
            for(int i=0;i<cardId.length;i++){
                System.out.println(cardId[i].substring(0,2)+":"+checkProvinceId(cardId[i].substring(0,2)));
            }
            
        }
        @Test
        public void testDate(){
            //String[] cardId = {"440982199003272359","43010219890414298x"};
            String cardId[] = {"445102198904312332",
                    "131100200102290696",
                    "51042119710630173X",
                    "340823196806263613",
                    "340703197410050615",
                    "440982195201230696",
                    "130203196110239132",
                    "321101197411218776",
                    "340501196812265178",
                    "330424197204277791",
                    "61040219710929439X",
                    "230826195610286476",
                    "350305196501252819",
                    "450881197212026374",
                    "220282197010121032",
                    "341723197209084377",
                    "451024197211265090",
                    "330727195609144416",
                    "411626197504219395",
                    "230605196203286219",
                    "21068119520426399X",
                    "511821195404264774",
                    "622923197107299798",
            };
            for(int i=0;i<cardId.length;i++){
                
                System.out.println(cardId[i].substring(6,14)+":"+isValidDate(cardId[i].substring(6,14)));
            }
        }
    }
  • 相关阅读:
    《独立网店经营十招招招制胜》
    行业礼品解决方案集
    北京第一礼品网
    ecshop网店系统+Ucenter用户中心+Cyask问答系统整合
    北京礼品在线入驻CRD核心商业区万达广场
    SEO中的关键字扩展
    礼问天下上线
    好网推荐
    北京礼品在线夏日礼の尚礼品促销第二波
    广告管理中的热点问题
  • 原文地址:https://www.cnblogs.com/zhongshengzhen/p/4465613.html
Copyright © 2011-2022 走看看