js校验身份证号【15位和18位】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
[javascript] view plaincopyprint?
function scCard(){ 
    var scType=document.getElementById("sc_card_type").value; 
    if(scType=="1"){ 
     var scCard=document.getElementById("sc_card_num").value; 
                      if(scCard.length!=0){ 
                       if(!checkCard(scCard)){ 
                        $("#errorTips").html("身份证号码格式错误"); 
                       }else
                        $("#errorTips").html(""); 
                       
                      
    
    return false
       
   
   //function checkidno(obj) { 
         
      var vcity={ 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:"国外" 
            }; 
    
   checkCard = function(obj) 
    
        //var card = document.getElementById('card_no').value; 
        //是否为空 
       // if(card === '') 
       // { 
               
      //     return false; 
        //} 
        //校验长度,类型 
        if(isCardNo(obj) === false
        
               
           return false
        
        //检查省份 
        if(checkProvince(obj) === false
        
               
           return false
        
        //校验生日 
        if(checkBirthday(obj) === false
        
               
           return false
        
        //检验位的检测 
        if(checkParity(obj) === false
        
               
           return false
        
        return true
    }; 
       
       
    //检查号码是否符合规范,包括长度,类型 
    isCardNo = function(obj) 
    
        //身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X 
        var reg = /(^\d{15}$)|(^\d{17}(\d|X)$)/; 
        if(reg.test(obj) === false
        
            return false
        
       
        return true
    }; 
       
    //取身份证前两位,校验省份 
    checkProvince = function(obj) 
    
        var province = obj.substr(0,2); 
        if(vcity[province] == undefined) 
        
            return false
        
        return true
    }; 
       
    //检查生日是否正确 
    checkBirthday = function(obj) 
    
        var len = obj.length; 
        //身份证15位时,次序为省(3位)市(3位)年(2位)月(2位)日(2位)校验位(3位),皆为数字 
        if(len == '15'
        
            var re_fifteen = /^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/;  
           var arr_data = obj.match(re_fifteen); 
            var year = arr_data[2]; 
            var month = arr_data[3]; 
            var day = arr_data[4]; 
            var birthday = new Date('19'+year+'/'+month+'/'+day); 
            return verifyBirthday('19'+year,month,day,birthday); 
        
        //身份证18位时,次序为省(3位)市(3位)年(4位)月(2位)日(2位)校验位(4位),校验位末尾可能为X 
        if(len == '18'
        
            var re_eighteen = /^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/; 
            var arr_data = obj.match(re_eighteen); 
            var year = arr_data[2]; 
            var month = arr_data[3]; 
            var day = arr_data[4]; 
            var birthday = new Date(year+'/'+month+'/'+day); 
            return verifyBirthday(year,month,day,birthday); 
        
        return false
    }; 
       
    //校验日期 
    verifyBirthday = function(year,month,day,birthday) 
    
        var now = new Date(); 
        var now_year = now.getFullYear(); 
        //年月日是否合理 
        if(birthday.getFullYear() == year && (birthday.getMonth() + 1) == month && birthday.getDate() == day) 
        
            //判断年份的范围(3岁到100岁之间) 
            var time = now_year - year; 
            if(time >= 0 && time <= 130
            
                return true
            
            return false
        
        return false
    }; 
       
    //校验位的检测 
    checkParity = function(obj) 
    
        //15位转18位 
        obj = changeFivteenToEighteen(obj); 
        var len = obj.length; 
        if(len == '18'
        
            var arrInt = new Array(7910584216379105842); 
            var arrCh = new Array('1''0''X''9''8''7''6''5''4''3''2'); 
            var cardTemp = 0, i, valnum;  
           for(i = 0; i < 17; i ++)  
           {  
               cardTemp += obj.substr(i, 1) * arrInt[i];  
           }  
           valnum = arrCh[cardTemp % 11];  
           if (valnum == obj.substr(171))  
           
                return true
            
            return false
        
        return false
    }; 
       
    //15位转18位身份证号 
    changeFivteenToEighteen = function(obj) 
    
        if(obj.length == '15'
        
            var arrInt = new Array(7910584216379105842); 
            var arrCh = new Array('1''0''X''9''8''7''6''5''4''3''2'); 
            var cardTemp = 0, i;    
           obj = obj.substr(06) + '19' + obj.substr(6, obj.length - 6); 
            for(i = 0; i < 17; i ++)  
           {  
               cardTemp += obj.substr(i, 1) * arrInt[i];  
           }  
           obj += arrCh[cardTemp % 11];  
           return obj; 
        
        return obj; 
    };

JAVA校验

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
package com.ebiz.base.utils;
 
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
import com.ebiz.base.consts.BaseConst;
import com.ebiz.base.consts.ConfigConst;
import com.ebiz.base.consts.ExceptionConst;
import com.ebiz.framework.util.date.DateUtil;
import com.ebiz.framework.util.date.DateValidate;
import com.ebiz.framework.util.validate.ValidateUtil;
import com.ebiz.persistence.laputa.FndPageRule;
import com.hp.hpl.sparta.ParseException;
 
public class CheckIdentificationUtil {
    public static void main(String[] args)  {
         
        System.out.println(idCardValidate("370802940221002"));
 
    }
     
    /**功能 18位 身份证的校验
     * @param idStr
     * @return   ParseException   1001
     * @throws Exception
     * @throws ParseException
     * @throws NumberFormatException
     * @throws java.text.ParseException
     * @author wangming
     */
    public static  String idCardValidate(String idStr)    {
         
        if (idStr == null || (  idStr.length() != 15 && idStr.length() != 18  )) {
            return BaseConst.PUBLIC_RESPONSE_FAIL;
        }
        if(  idStr.length() == 15 ){ 
            StringBuilder sb = new StringBuilder(); 
            sb.append(idStr.substring(06)) 
              .append("19"
              .append(idStr.substring(6)); 
            try {
                sb.append(getVerifyCode(sb.toString()));
                idStr = sb.toString();
            catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            
           System.out.println(sb);
        }
     
        String errorInfo = "";// 记录错误信息
        //取模映射
        String[] valCodeArr = { "1""0""X""9""8""7""6""5""4","3""2" };
        //加权
        String[] wi = { "7""9""10""5""8""4""2""1""6""3""7","9""10""5""8""4""2" };
        String ai =idStr.substring(017);
        if (ValidateUtil.isDigit(ai) == false) {
            errorInfo = ExceptionConst.PAXINFO_CARD_ISNOTNUM;
            return errorInfo;
        }
        // ================ 出生年月是否有效 ================
        String strYear = ai.substring(610);// 年份
        String strMonth = ai.substring(1012);// 月份
        String strDay = ai.substring(1214);// 月份
        if (DateValidate.isStrDate(ai.substring(6,14))== false) {
            errorInfo = ExceptionConst.PAXINFO_CARD_BIRTHDAY_OVER;
                    //"身份证生日无效。";
            return errorInfo;
        }
        GregorianCalendar gc = new GregorianCalendar();
        SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd");
        Date limitDate=DateUtil.getIntervalDate(new Date(),DateUtil.BEFORE, "150Y");
        Date dd = null;
        try {
            dd = s.parse(strYear + "-" + strMonth + "-" + strDay);
        catch (java.text.ParseException e) {//类型转换异常
            errorInfo = "ParseException";
            return errorInfo;
        }
        if (DateValidate.isDateBefore(dd,limitDate)) {
            errorInfo = ExceptionConst.PAXINFO_CARD_BIRTHDAY_OVER;
                    //"身份证生日不在有效范围。";
            return errorInfo;
        }
 
        // ================ 地区码是否有效 ================
         
        if (ConfigConst.CARD_AREA_CODE.indexOf(ai.substring(02))<0) {
            errorInfo = ExceptionConst.PAXINFO_CARD_AREA_OVER;
                    //"身份证地区编码错误";
            return errorInfo;
        }
        // ================ 判断最后一位的值是否符合校验规则 ================
        int totalmulAiWi = 0;
        for (int i = 0; i < 17; i++) {
            totalmulAiWi = totalmulAiWi+ Integer.parseInt(String.valueOf(ai.charAt(i)))* Integer.parseInt(wi[i]);
        }
        int modValue = totalmulAiWi % 11;
        //映射
        String strVerifyCode = valCodeArr[modValue];
        ai = ai + strVerifyCode;
        //x的校验忽略末尾的大小写
        if (ai.equalsIgnoreCase(idStr) == false) {
                errorInfo = ExceptionConst.PAXINFO_CARD_LAST_OVER;
                        //"身份证无效,不是合法的身份证号码";
                return errorInfo;
        }
        return  BaseConst.PUBLIC_RESPONSE_SUCCESS;
    
         
         
 
    /**
     * 将已经加上年份的15位身份证,按照规则由17位推算出第18位
     * @param idCardNumber
     * @return
     */
    public static char getVerifyCode(String idCardNumber) { 
        char[] Ai = idCardNumber.toCharArray(); 
        int[] Wi = {7910584216379105842}; 
        char[] verifyCode = {'1','0''X''9''8''7''6''5''4''3''2'}; 
        int S = 0
        int Y; 
        for(int i = 0; i < Wi.length; i++){ 
            S += (Ai[i] - '0') * Wi[i]; 
        
        Y = S % 11
        return verifyCode[Y]; 
    
 
 
}

  

身份证号正则校验(js校验+JAVA校验)的更多相关文章

  1. 身份证校验,前台js校验,后台java校验

    js校验: var vcity={ 11:"北京",12:"天津",13:"河北",14:"山西",15:"内 ...

  2. java中身份证号和的银行卡的深度校验

    一: 身份证号: package com.mobile.utils; import java.text.SimpleDateFormat; import java.util.Calendar; imp ...

  3. 微信小程序常用表单校验方法(手机号校验、身份证号(严格和非严格校验、验证码六位数字校验))

    util.js function isPhone(value) { if (!/^1(3|4|5|7|8)\d{9}$/.test(value)) { return false } else { re ...

  4. Java中校验身份证号合法性(真伪),获取出生日期、年龄、性别、籍贯

    开发过程中有用的身份证号的业务场景,那么校验身份证的合法性就很重要了,另外还有通过身份证获取出生日期.年龄.性别.籍贯等信息, 下面是本人在开发中用到的关于校验身份证真伪的工具类,可以直接拿来使用,非 ...

  5. js验证真实姓名与身份证号,手机号

    最近的项目中用的需要调用实名认证的接口,实名认证接口价格相比短信而言高了不是几分钱,所以说调用实名认证的条件就要严格把关,因此用到js验证真实姓名与js验证身份证号. 进入正题 1.js验证真实姓名 ...

  6. javascript实现验证身份证号的有效性并提示

    javascript实现验证身份证号的有效性并提示 function nunber(allowancePersonValue){ if(allowancePersonValue=="身份证号 ...

  7. 最全,可直接用的一些正则校验,判断邮箱,手机号码,车牌号,身份证号,网址,账号,密码,ip,去掉html格式,工商税号等。

    一些正则校验,判断邮箱,手机号码,车牌号,身份证号,网址,账号,密码,ip,去掉html格式,工商税号等. // 判断邮箱 isValid = [text isValidEmail]; // 判断手机 ...

  8. JS校验身份证号的合法性

    前端表单中有身份证号的校验,下边是用JS来校验身份证号的合法性. 中国居民身份证号码编码规则 第一.二位表示省(自治区.直辖市.特别行政区). 第三.四位表示市(地级市.自治州.盟及国家直辖市所属市辖 ...

  9. 身份证真实性校验js、mini ui身份证长度正则验证

    身份证号码真实性校验 <input type="text" value="请输入身份证号" id="cards" ><bu ...

随机推荐

  1. Mecanim Control

    http://www.ufe3d.com/doku.php/mecanimcontrol Mecanim Control Your ultimate solution for Mecanim base ...

  2. 3DMAX 3场景制作

    1 模型制作 2 UVW贴图展开 1 打开材质编辑器,给模型一个材质(以后应该以这个材质生成uvw展开,进而生成贴图,贴图绘制完毕后,再贴回这个材质中,就完成了给模型加贴图的操作) 2 在编辑面板中添 ...

  3. 新版蜀山剑侠传3D立体格斗全方位剖析

    国人终极格斗<蜀山剑侠传>,突破传统横版格斗"二次元"瓶颈,率先开辟3D立体横版格斗网游先河,实现"有纬度"的空间化立体式全景3D战斗体验!游戏大量 ...

  4. [Xcode 实际操作]一、博主领进门-(13)在控制台的几种打印输出语句和po命令

    目录:[Swift]Xcode实际操作 本文将演几种在控制台输出日志的方式. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import UIKit class ...

  5. [Xcode 实际操作]二、视图与手势-(4)给图像视图添加边框效果

    目录:[Swift]Xcode实际操作 本文将演示给图片添加颜色相框 import UIKit class ViewController: UIViewController { override fu ...

  6. 【OpenJ_Bailian - 4005】拼点游戏(贪心)

    拼点游戏 Descriptions: C和S两位同学一起玩拼点游戏.有一堆白色卡牌和一堆蓝色卡牌,每张卡牌上写了一个整数点数.C随机抽取n张白色卡牌,S随机抽取n张蓝色卡牌,他们进行n回合拼点,每次两 ...

  7. mybatis二级缓存

    二级缓存区域是根据mapper的namespace划分的,相同namespace的mapper查询数据放在同一个区域,如果使用mapper代理方法每个mapper的namespace都不同,此时可以理 ...

  8. 远程kafka通信实例,各种bug解决----虚拟机+本地电脑

    为了实现远程kafka通信,我可谓是呕心沥血.期间各种bug各种调,太煎熬了 (T.T) 介绍: 我用一台虚拟机作为远程消息的发送方,用本地电脑主机作为消息的接收方 虚拟机:安装java,kafka, ...

  9. bzoj1145[CTSC2008]图腾

    传送门 虽然是远古时期的ctsc,但是果然还是ctsc啊 前置芝士:树状数组 这个题最开始的思路很好想,由于之前写过一个类似处理的题,所以这个题我一开始就想到了思路. 首先,我们可以尝试讲图腾表示为x ...

  10. 基于php的AWS存储服务

    近几天用到了aws的s3存储服务,公司内部的完全兼容aws并对其进行了封装,之前也用过,现在把经验总结一下. 既然要用,首先需要安装sdk,下边提供了几种安装方法 方法一:使用composer安装 1 ...