精华内容
下载资源
问答
  • 2021-12-23 16:57:07
       var validatestatus = (rule, value, callback) => {
          //身份证校验
          if (value === "") {
            // callback(new Error("请输入身份证"));
          } else {
            if (!/(^\d{15}$)|(^\d{17}(\d|X|x)$)/.test(value)) {
              callback(new Error("你输入的身份证长度或格式错误"));
            }
            // 身份证城市
            const aCity = {
              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: "国外"
            };
            if (!aCity[parseInt(value.substr(0, 2))]) {
              callback(new Error("你的身份证地区非法"));
            }
    
            // 出生日期验证
            const sBirthday = (
              value.substr(6, 4) +
              "-" +
              Number(value.substr(10, 2)) +
              "-" +
              Number(value.substr(12, 2))
            ).replace(/-/g, "/");
            const d = new Date(sBirthday);
            if (
              sBirthday !==
              d.getFullYear() + "/" + (d.getMonth() + 1) + "/" + d.getDate()
            ) {
              callback(new Error("身份证上的出生日期非法"));
            }
    
            // 身份证号码校验
            let sum = 0;
            const weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
            const codes = "10X98765432";
            for (let i = 0; i < value.length - 1; i++) {
              sum += value[i] * weights[i];
            }
            const last = codes[sum % 11]; // 计算出来的最后一位身份证号码
            if (value[value.length - 1] !== last) {
              callback(new Error("你输入的身份证号非法"));
            }
    
            callback();
    
            // callback(new Error("请输入合法的手机号"));
          }
        };

    更多相关内容
  • 身份证校验码的计算方法 1、将前面的身份证号码17位数分别乘以不同的系数。第i位对应的数为[2^(18-i)]mod11。从第一位到第十七位的系数分别为:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 ; 2、将这17位数字和系数相乘...
  • 中国居民身份证校验码算法如下: 将身份证号码前面的17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。 将这17位数字和系数相乘的结果相加。用加...
  • 此工具可通过计算,得出身份证号码最后一位。需提供身份证号码前17位,准确率100%。
  • 1、只针对18为身份证号码进行校验,现在15位的应该很少了, 2、不区分xX大小写, 3、出生年份1900-2099,每月的天数也进行相关验证(考虑的闰月的情况), 4、校验规则详见,这个写的比较详细和清楚,相信看过后都可以...
  • bat文件方便查询身份证校验位,输入身份证前17位后回车自动生成校验位数。
  • Java校验身份证号码工具类 ---运行几年了,很靠谱。包含15位身份证校验Java校验身份证号码工具类 ---运行几年了,很靠谱。包含15位身份证校验
  • 身份证校验

    2017-06-15 14:00:39
    可以正确的算出身份证是否正确
  • 其中身份证号码的最后一位是校验码,跟据前17位计算得到。算法大 概是这样:把前17位的每一个数字和一串加权因子相乘,再计算这些乘积的和;把这些乘积的和模11得到的数字作为序号,最后在一个校验码串中提取出与...
  • vb编写身份证校验,可直接复制应用,在vb或者VBa中都可以使用
  • js身份证校验

    2018-08-27 17:10:52
    身份证校验规则,支持15、18位身份证,支持地址编码、出生日期、校验位验证
  • 1、正则表达式写法: CREATE OR REPLACE FUNCTION Func_checkidcard (p_idcard IN VARCHAR2) RETURN INT IS v_regstr VARCHAR2 (2000); v_sum NUMBER; v_mod NUMBER; v_checkcode CHAR (11) := '10X98765432';...
  • 易语言身份证校验源码
  • 这个接口是基于网上查询身份证信息的,直接校验通过网页请求实现的,一般的小网站可以满足使用,而且是免费的,这里只是校验了下身份证真实性而已,也可以匹配其他信息,看个人需要,这里只是提供一种思路,当然大...
  • 身份证校验工具类

    2021-12-08 20:56:10
    直接上工具类方法了,方法是参考网上其它同学缩写 import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.GregorianCalendar;... * 身份证校验类型 */ public class IdCardNo

    直接上工具类方法了,方法是参考网上其它同学所写,在此只是作为一个记录

    
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.GregorianCalendar;
    import java.util.Hashtable;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    /**
     * 身份证校验类型
     */
    public class IdCardNoUtils {
    
        // 新身份证长度18
        private static final int IDCARDNO_LENGTH_NEW = 18;
        // 老身份证长度15
        private static final int IDCARDNO_LENGTH_OLD = 15;
    
        private static final int IDCARDNO_SUB_LENGTH = 17;
    
        private static final int MAX_YEAR = 100;
        private static final int MAX_MONTH = 12;
        private static final int MAX_DAY = 31;
        private static final String CHAR = "-";
    
    
        //身份证前1位每位加权因子
        private static final String[] CHECK_CODE = { "7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7", "9", "10", "5", "8", "4", "2" };
    
        //身份证第18位校检码
        private static final String[] REFNUMBER = { "1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2" };
    
        private static final String  STRNUM= "[0-9]*";
    
        /**
         * 地区代码
         * @return Hashtable
         */
        private static Hashtable GetAreaCode() {
            Hashtable<String,String> hashtable = new Hashtable<String,String>();
            hashtable.put("11", "北京");
            hashtable.put("12", "天津");
            hashtable.put("13", "河北");
            hashtable.put("14", "山西");
            hashtable.put("15", "内蒙古");
            hashtable.put("21", "辽宁");
            hashtable.put("22", "吉林");
            hashtable.put("23", "黑龙江");
            hashtable.put("31", "上海");
            hashtable.put("32", "江苏");
            hashtable.put("33", "浙江");
            hashtable.put("34", "安徽");
            hashtable.put("35", "福建");
            hashtable.put("36", "江西");
            hashtable.put("37", "山东");
            hashtable.put("41", "河南");
            hashtable.put("42", "湖北");
            hashtable.put("43", "湖南");
            hashtable.put("44", "广东");
            hashtable.put("45", "广西");
            hashtable.put("46", "海南");
            hashtable.put("50", "重庆");
            hashtable.put("51", "四川");
            hashtable.put("52", "贵州");
            hashtable.put("53", "云南");
            hashtable.put("54", "西藏");
            hashtable.put("61", "陕西");
            hashtable.put("62", "甘肃");
            hashtable.put("63", "青海");
            hashtable.put("64", "宁夏");
            hashtable.put("65", "新疆");
            hashtable.put("71", "台湾");
            hashtable.put("81", "香港");
            hashtable.put("82", "澳门");
            hashtable.put("91", "国外");
            return hashtable;
        }
    
        /**
         *身份证验证
         * @param idStr
         * @return 校验信息,correct为成功,失败会返回对应的失败原因
         */
        public static boolean checkIdCardNo(String idStr){
            String iDCardNo = "";
            try {
                //判断号码的长度 15位或18位
                if (idStr.length() != IDCARDNO_LENGTH_OLD && idStr.length() != IDCARDNO_LENGTH_NEW) {
                    // "身份证号码长度应该为15位或18位"
                    return false;
                }
                if (idStr.length() == IDCARDNO_LENGTH_NEW) {
                    iDCardNo = idStr.substring(0, 17);
                } else if (idStr.length() == IDCARDNO_LENGTH_OLD) {
                    iDCardNo = idStr.substring(0, 6) + "19" + idStr.substring(6, 15);
                }
                if (isStrNum(iDCardNo) == false) {
                    // "身份证15位号码都应为数字;18位号码除最后一位外,都应为数字"
                    return false;
                }
                //判断地区码
                Hashtable h = GetAreaCode();
                if (h.get(iDCardNo.substring(0, 2)) == null) {
                    // "身份证地区编码错误"
                    return false;
                }
                //判断出生年月
                String strYear = iDCardNo.substring(6, 10);
                String strMonth = iDCardNo.substring(10, 12);
                String strDay = iDCardNo.substring(12, 14);
                if (isStrDate(strYear + strMonth + strDay) == false) {
                    // "身份证生日无效"
                    return false;
                }
                GregorianCalendar gc = new GregorianCalendar();
                SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd");
                if ((gc.get(Calendar.YEAR) - Integer.parseInt(strYear)) > MAX_YEAR || (gc.getTime().getTime() - s.parse(strYear + CHAR + strMonth + CHAR + strDay).getTime()) < 0) {
                    // "身份证生日不在有效范围"
                    return false;
                }
                if (Integer.parseInt(strMonth) > MAX_MONTH || Integer.parseInt(strMonth) == 0) {
                    // "身份证月份无效"
                    return false;
                }
                if (Integer.parseInt(strDay) > MAX_DAY || Integer.parseInt(strDay) == 0) {
                    // "身份证日期无效"
                    return false;
                }
    
                //判断最后一位
                int theLastOne = 0;
                for (int i = 0; i < IDCARDNO_SUB_LENGTH; i++) {
                    theLastOne = theLastOne + Integer.parseInt(String.valueOf(iDCardNo.charAt(i))) * Integer.parseInt(CHECK_CODE[i]);
                }
                int modValue = theLastOne % 11;
                String strVerifyCode = REFNUMBER[modValue];
                iDCardNo = iDCardNo + strVerifyCode;
    
                if (idStr.length() == IDCARDNO_LENGTH_NEW && !iDCardNo.equals(idStr)) {
                    // "身份证无效,不是合法的身份证号码"
                    return false;
                }
                return true;
            }catch (Exception e){
                e.printStackTrace();
            }
            return false;
        }
    
    
        /**
         * 判断字符串是否为数字
         * @param str
         * @return
         */
        private static boolean isStrNum(String str) {
            Pattern pattern = Pattern.compile(STRNUM);
            Matcher isNum = pattern.matcher(str);
            if (isNum.matches()) {
                return true;
            } else {
                return false;
            }
        }
        /**
         * 判断日期是否有效
         * @param strDate
         * @return
         */
        public static boolean isStrDate(String strDate) {
            if (strDate == null){
                return false;
            }
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
            if (strDate.trim().length() != dateFormat.toPattern().length()){
                return false;
            }
            //执行严格的日期匹配
            dateFormat.setLenient(false);
            try {
                dateFormat.parse(strDate.trim());
            } catch (Exception e) {
                return false;
            }
            return true;
        }
    
        public static void main(String[] args) {
            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",
                    "622923197107299",
            };
            for(int i=0;i<cardId.length;i++){
                System.out.println(checkIdCardNo(cardId[i]));
            }
        }
    
    }```
    
    
    展开全文
  • 身份证校验码规则

    2022-05-12 00:10:08
    公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码,最后一位是数字校验码; 地址码 表示编码对象常住户口所在县...

    背景

    项目中有部分功能需要验证用户身份, 为了防止用户随便输入身份信息, 因此要对输入数据进行验证,于是参照百科提供的规则进行了实现;

    公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码,最后一位是数字校验码;

    • 地址码
      表示编码对象常住户口所在县(市、旗、区)的行政区域划分代码,按GB/T2260的规定执行。
    • 出生日期码
      表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日代码之间不用分隔符。
    • 顺序码
      表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。

    1. 将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 ;
    2. 将这17位数字和系数相乘的结果相加;
    3. 用加出来和除以11,看余数是多少;
    4. 余数只可能有0 1 2 3 4 5 6 7 8 9 10这11个数字。其分别对应的最后一位身份证的号码为1 0 X 9 8 7 6 5 4 3 2;

    身份信息原始计算表

    代码实现

    static const unsigned char id_num_weight[17] = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
    static const unsigned char tail_num_tab[11] = {'1','0','X','9','8','7','6','5','4','3','2'};
    
    /**
     * @brief 校验身份证字段是否合法
     * 
     * @param userid 用户身份证信息
     * @return char 0: 不合法; 1:合法
     */
    char check_id_number_is_valid(char* idnum)
    {
        int crc, i;
    
        for (i = 0; i < 18; i++)
        {
            if(idnum[i] == 0)
                break;
        }
        if(i != 18) {
            return 0;
        }
    
    	//TODO aera code check
    
    	//TODO date check
    
        //id card number check valid
        for (crc = 0, i = 0; i < 17; i++)
        {
            crc+= (idnum[i] - '0')*id_num_weight[i];
        }
        i = crc % 11;
        //x mean Roman numerals 10, should like X, so we change x to X
        if(idnum[17] == 'x') {
            idnum[17] = 'X';
        }
        if(idnum[17] != tail_num_tab[i]) {
            return 0;
        }
        
        return 1;
    }
    

    参考文章

    1. 身份证校验码
    展开全文
  • 身份证校验规则

    2022-01-12 08:58:59
    } else { //18位身份证需要验证最后一位校验位 if (code.length == 18) { code = code.split(""); //∑(ai×Wi)(mod 11) //加权因子 const factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]; //...

    1、只允许输入数字和X

     oninput="this.value=this.value.replace(/[^0-9X]+/,'');"
    

    2、

    checkIdno(code) {
          const city = {
            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: "国外 ",
          };
          // eslint-disable-next-line no-unused-vars
          let tip = "";
          let pass = true;
          if (
            !code ||
            !/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}(\d|[xX])$/.test(
              code
            )
          ) {
            this.$message.error("身份证输入不正确!");
            pass = false;
          } else if (!city[code.substr(0, 2)]) {
            this.$message.error("身份证输入不正确!");
            pass = false;
          } else {
            //18位身份证需要验证最后一位校验位
            if (code.length == 18) {
              code = code.split("");
              //∑(ai×Wi)(mod 11)
              //加权因子
              const factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
              //校验位
              const parity = [1, 0, "X", 9, 8, 7, 6, 5, 4, 3, 2];
              let sum = 0;
              let ai = 0;
              let wi = 0;
              for (let i = 0; i < 17; i++) {
                ai = code[i];
                wi = factor[i];
                sum += ai * wi;
              }
              // const last = parity[sum % 11]
              if (parity[sum % 11] != code[17]) {
                this.$message.error("身份证输入不正确!");
                pass = false;
              }
            }
          }
          return pass;
        },
    
    展开全文
  • 使用我的工具类可以轻松实现身份证号码是否有效的校验
  • 身份证校验

    2022-02-25 10:13:25
    附:身份证校验码简明算法 第一步:将前 17 位依次填入下面的方框,完成算式: (为便于观察,算式分为四行:地址、出生年、生日、序列性别) 第二步:上式计算得出的数值,除以 11,取其余数; 第三步:用 ...
  • IOS 身份证校验 身份证基础知识: 身份证是国民的身份编号,编号是有一定规律的,这里介绍身份证验证规则比较详细。项目中经常会需要对身份证进行校验,我们先了解一些基本知识,然后分析代码 居民身份证号码,根据...
  • 身份证校验码计算

    千次阅读 2020-11-12 17:51:01
    身份证校验码计算 最近看一份文档看到身份证规则,觉得很有趣,这里记录一下如何计算校验码 1 身份证编码规则 《中华人民共和国国家标准GB 11643-1999》中有关公民身份号码的规定,公民身份号码是特征组合码,由十七...
  • Oracle身份证校验函数

    千次阅读 2021-12-02 20:57:15
    Oracle通过SQL编写函数实现对15位18位身份证校验
  • Java居民身份证校验规则!Java居民身份证校验规则!Java居民身份证校验规则!Java居民身份证校验规则!Java居民身份证校验规则!
  • 本函数提供18位身份证校验位的计算方法,输入前17位即可得到第18位的校验码!
  • 公民身份证校验规则最新最全最严格(包含最后一位校验码校验) 身份证号前两位为省级行政区划 11: “北京”, 12: “天津” 13: “河北”, 14: “山西”, 15: “内蒙古”, 正则表达:1[1-5] 21: “辽宁”, 22: “吉林...
  • 身份证校验码程序c#

    2022-04-08 22:07:50
  • jquery.validate 扩展身份证校验方法

    热门讨论 2012-11-30 15:24:58
    ", "身份证号码校验错误!", "身份证地区非法!"); var area = { 11: "北京", 12: "天津", 13: "河北", 14: "山西", 15: "内蒙古", 21: "辽宁", 22: "吉林", 23: "黑龙江", 31: "上海", 32: "江苏", 33: "浙江", 34: ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 30,608
精华内容 12,243
关键字:

身份证校验