• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

常用的的身份证校验方法

武飞扬头像
两点王爷
帮助1

目录

1、前端校验

2、后端代码计算


考虑身份证的位数,身份证包涵的信息,如下所示

省份码(2位) 地级市(2位) 区县码(2位) 出生年月(8位) 顺序码(3位) 校验码(1位)
15位:6位地址码 6位出生年月日(年份取后两位) 3位顺序码
18位:6位地址码 8位出生年月日 3位顺序码 1位校验码
地区码:
1、 第一、二位表示省(自治区、直辖市、特别行政区)
2、 第三、四位表示市(地级市、自治州、盟及国家直辖市所属市辖区和县的汇总码,其中,01-20,51-70表示省直辖市;21-50表示地区(自治州、盟))
3、 第五、六位表示县(市辖区、县级市、旗,其中,01-18表示市辖区或地区(自治州、盟)辖县级市;21-80表示县(旗);81-99表示省直辖县级市)。
顺序码:奇数分给男性,偶数分给女性。
校验码:即身份证的最后一位,是把身份证号码按统一的公式计算出来的(10个数字,0-9正常表示,10=X) 

1、前端校验

具体内容如下:

  1.  
    =====VUE中表单校验方法================================================================
  2.  
    export default {
  3.  
    name:'',
  4.  
    components: {
  5.  
    },
  6.  
    data() {
  7.  
    //身份证校验
  8.  
    const isCnNewID = (rule, value, callback) => {
  9.  
    var arrExp = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];//加权因子
  10.  
    var arrValid = [1, 0, "X", 9, 8, 7, 6, 5, 4, 3, 2];//校验码
  11.  
    if (/^\d{17}\d|x$/i.test(value)) {
  12.  
    var sum = 0, idx;
  13.  
    for (var i = 0; i < value.length - 1; i ) {
  14.  
    // 对前17位数字与权值乘积求和
  15.  
    sum = parseInt(value.substr(i, 1), 10) * arrExp[i];
  16.  
    }
  17.  
    // 计算模(固定算法)
  18.  
    idx = sum % 11;
  19.  
    // 检验第18为是否与校验码相等
  20.  
    if (arrValid[idx] == value.substr(17, 1).toUpperCase()) {
  21.  
    callback()
  22.  
    } else {
  23.  
    callback("身份证格式有误")
  24.  
    }
  25.  
    } else {
  26.  
    callback("身份证格式有误")
  27.  
    }
  28.  
    }
  29.  
    return {
  30.  
    title:'',
  31.  
    open:false,
  32.  
    form:{},
  33.  
    //表单校验
  34.  
    rules: {
  35.  
    idCardNumber: [
  36.  
    { required: true, message: "身份证不能为空", trigger: "blur" },
  37.  
    { //调用上面定义的方法校验格式是否正确
  38.  
    validator: isCnNewID,trigger: "blur"
  39.  
    }
  40.  
    ]
  41.  
    }
  42.  
    }
  43.  
    }
  44.  
     
  45.  
    ======获取身份证中的信息=============================================================
  46.  
    //获取身份证中的信息
  47.  
    //当type=1时获取出生日期,type=2时获取性别,type=3时获取年龄
  48.  
    IdCardNum(IdCard, type) {
  49.  
    if (type === 1) {
  50.  
    //获取出生日期
  51.  
    let birthday =
  52.  
    IdCard.substring(6, 10)
  53.  
    "年"
  54.  
    IdCard.substring(10, 12)
  55.  
    "月"
  56.  
    IdCard.substring(12, 14)
  57.  
    "日";
  58.  
    return birthday;
  59.  
    }
  60.  
    if (type === 2) {
  61.  
    //获取性别
  62.  
    if (parseInt(IdCard.substr(16, 1)) % 2 === 1) {
  63.  
    return "男";
  64.  
    } else {
  65.  
    return "女";
  66.  
    }
  67.  
    }
  68.  
    if (type === 3) {
  69.  
    //获取年龄
  70.  
    var ageDate = new Date();
  71.  
    var month = ageDate.getMonth() 1;
  72.  
    var day = ageDate.getDate();
  73.  
    var age = ageDate.getFullYear() - IdCard.substring(6, 10) - 1;
  74.  
    if (
  75.  
    IdCard.substring(10, 12) < month ||
  76.  
    (IdCard.substring(10, 12) === month &&
  77.  
    IdCard.substring(12, 14) <= day)
  78.  
    ) {
  79.  
    age ;
  80.  
    }
  81.  
    if (age <= 0) {
  82.  
    age = 1;
  83.  
    }
  84.  
    return age;
  85.  
    }
  86.  
    },
学新通

2、后端代码计算

具体工具类如下:

  1.  
    public class CalculateUserInfoByIdCardNumUtils {
  2.  
     
  3.  
    /**
  4.  
    * 根据身份证号计算年龄1
  5.  
    */
  6.  
    public static String calculateAge(String idNumber) {
  7.  
    String age = null;
  8.  
    if (idNumber != null || idNumber != "") {
  9.  
    Calendar cal = Calendar.getInstance();
  10.  
    int yearNow = cal.get(Calendar.YEAR);
  11.  
    int monthNow = cal.get(Calendar.MONTH) 1;
  12.  
    int dayNow = cal.get(Calendar.DATE);
  13.  
    int year = Integer.valueOf(idNumber.substring(6, 10));
  14.  
    int month = Integer.valueOf(idNumber.substring(10, 12));
  15.  
    int day = Integer.valueOf(idNumber.substring(12, 14));
  16.  
    if ((month < monthNow) || (month == monthNow && day <= dayNow)) {
  17.  
    age = String.valueOf(yearNow - year);
  18.  
    } else {
  19.  
    age = String.valueOf(yearNow - year - 1);
  20.  
    }
  21.  
    return age;
  22.  
    } else {
  23.  
    age = idNumber;
  24.  
    return age;
  25.  
    }
  26.  
    }
  27.  
     
  28.  
    /**
  29.  
    * 根据身份证号计算年龄2
  30.  
    */
  31.  
    public static String calculateAges(String idNumber) {
  32.  
    String age = "";
  33.  
    if (idNumber == null || "".equals(idNumber)) {
  34.  
    return "当前身份证件号为空!请正确填写身份证号!";
  35.  
    }else if (idNumber.length() != 15 && idNumber.length() != 18) {
  36.  
    return "当前身份证件号有误!请检查身份证位数是否正确或是否输入空格!";
  37.  
    }else {
  38.  
    Calendar cal = Calendar.getInstance();
  39.  
    int yearNow = cal.get(Calendar.YEAR);
  40.  
    int monthNow = cal.get(Calendar.MONTH) 1;
  41.  
    int dayNow = cal.get(Calendar.DATE);
  42.  
    int year = Integer.valueOf(idNumber.substring(6, 10));
  43.  
    int month = Integer.valueOf(idNumber.substring(10, 12));
  44.  
    int day = Integer.valueOf(idNumber.substring(12, 14));
  45.  
    if ((month < monthNow) || (month == monthNow && day <= dayNow)) {
  46.  
    age = String.valueOf(yearNow - year);
  47.  
    } else {
  48.  
    age = String.valueOf(yearNow - year - 1);
  49.  
    }
  50.  
    }
  51.  
    return age;
  52.  
    }
  53.  
     
  54.  
     
  55.  
    /**
  56.  
    * 根据身份证号判断性别
  57.  
    */
  58.  
    public static String judgeGender(String idNumber) throws IllegalArgumentException {
  59.  
    if (idNumber == null || "".equals(idNumber)) {
  60.  
    return "当前身份证件号为空!请正确填写身份证号!";
  61.  
    }else if (idNumber.length() != 18 && idNumber.length() != 15) {
  62.  
    throw new IllegalArgumentException("身份证号长度错误");
  63.  
    }
  64.  
    int gender = 0;
  65.  
    if (idNumber.length() == 18) {
  66.  
    //如果身份证号18位,取身份证号倒数第二位
  67.  
    char c = idNumber.charAt(idNumber.length() - 2);
  68.  
    gender = Integer.parseInt(String.valueOf(c));
  69.  
    } else {
  70.  
    //如果身份证号15位,取身份证号最后一位
  71.  
    char c = idNumber.charAt(idNumber.length() - 1);
  72.  
    gender = Integer.parseInt(String.valueOf(c));
  73.  
    }
  74.  
    //System.out.println("gender = " gender);
  75.  
    if (gender % 2 == 1) {
  76.  
    return "0";
  77.  
    } else {
  78.  
    return "1";
  79.  
    }
  80.  
    }
  81.  
     
  82.  
     
  83.  
    /**
  84.  
    * 根据身份证的号码算出当前身份证持有者的年龄
  85.  
    *
  86.  
    * @return -1(表示异常) 0 (身份证号码为空)
  87.  
    * @throws Exception
  88.  
    */
  89.  
    public static String getAgeForIdcard(String idcard) {
  90.  
    try {
  91.  
    String age = String.valueOf(0);
  92.  
    if (StringUtils.isEmpty(idcard)) {
  93.  
    return age;
  94.  
    }
  95.  
    String birth = "";
  96.  
    if (idcard.length() == 18) {
  97.  
    birth = idcard.substring(6, 14);
  98.  
    } else if (idcard.length() == 15) {
  99.  
    birth = "19" idcard.substring(6, 12);
  100.  
    }
  101.  
    int year = Integer.valueOf(birth.substring(0, 4));
  102.  
    int month = Integer.valueOf(birth.substring(4, 6));
  103.  
    int day = Integer.valueOf(birth.substring(6));
  104.  
    Calendar cal = Calendar.getInstance();
  105.  
    age = String.valueOf(cal.get(Calendar.YEAR) - year);
  106.  
    int ages = Integer.parseInt(age);
  107.  
    //周岁计算
  108.  
    if (cal.get(Calendar.MONTH) < (month - 1) || (cal.get(Calendar.MONTH) == (month - 1) && cal.get(Calendar.DATE) < day)) {
  109.  
    ages--;
  110.  
    }
  111.  
    age = String.valueOf(ages);
  112.  
    return age;
  113.  
    } catch (Exception e) {
  114.  
    e.getMessage();
  115.  
    }
  116.  
    return "-1";
  117.  
    }
  118.  
    }
学新通

身份证的正则表达式

  1.  
    let IDNum18 = /^([1-6][1-9]|50)\d{4}(18|19|20)\d{2}((0[1-9])|10|11|12)(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/
  2.  
    let IDNum15 =  /^([1-6][1-9]|50)\d{4}\d{2}((0[1-9])|10|11|12)(([0-2][1-9])|10|20|30|31)\d{3}$/

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhghafjg
系列文章
更多 icon
同类精品
更多 icon
继续加载