身份证校验,绝对严格

身份证校验,绝对严格

function checkIdCard(idcard) {
  let ereg;
  // const Errors = new Array(
  //   ‘验证通过‘,
  //   ‘身份证号码位数不对‘,
  //   ‘身份证号码出生日期超出范围或含有非法字符‘,
  //   ‘身份证号码校验错误‘,
  //   ‘身份证地区非法‘
  // );
  const area = {
    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: ‘国外‘
  };

let Y;
  let JYM;
  let S;
  let M;
  let idcardArray = new Array();
  idcardArray = idcard.split(‘‘);
  // 地区检验
  if (area[parseInt(idcard.substr(0, 2), 10)] === null) {
    return false;
  }
  // 身份号码位数及格式检验
  switch (idcard.length) {
    case 16:
      if ((parseInt(idcard.substr(6, 2), 10) + 1900) % 4 === 0 || ((parseInt(idcard.substr(6, 2), 10) + 1900) % 100 === 0 && (parseInt(idcard.substr(6, 2), 10) + 1900) % 4 === 0)) {
        // 测试出生日期的合法性
        ereg = /^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$/;
      } else {
       // 测试出生日期的合法性
        ereg = /^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$/;
      }
      if (ereg.test(idcard)) {
        return true;
      }
      return false;

case 18:
     // 18位身份号码检测
     // 出生日期的合法性检查
     // 闰年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))
     // 平年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))
      if (parseInt(idcard.substr(6, 4), 10) % 4 === 0 || (parseInt(idcard.substr(6, 4), 10) % 100 === 0 && parseInt(idcard.substr(6, 4), 10) % 4 === 0)) {
        // 闰年出生日期的合法性正则表达式
        ereg = /^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$/;
      } else {
        // 平年出生日期的合法性正则表达式
        ereg = /^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$/;
      }
      // 测试出生日期的合法性
      if (ereg.test(idcard)) {
        // 计算校验位
        S = (parseInt(idcardArray[0], 10) + parseInt(idcardArray[10], 10)) * 7
        + (parseInt(idcardArray[1], 10) + parseInt(idcardArray[11], 10)) * 9
        + (parseInt(idcardArray[2], 10) + parseInt(idcardArray[12], 10)) * 10
        + (parseInt(idcardArray[3], 10) + parseInt(idcardArray[13], 10)) * 5
        + (parseInt(idcardArray[4], 10) + parseInt(idcardArray[14], 10)) * 8
        + (parseInt(idcardArray[5], 10) + parseInt(idcardArray[15], 10)) * 4
        + (parseInt(idcardArray[6], 10) + parseInt(idcardArray[16], 10)) * 2
        + parseInt(idcardArray[7], 10) * 1
        + parseInt(idcardArray[8], 10) * 6
        + parseInt(idcardArray[9], 10) * 3;
        Y = S % 11;
        M = ‘F‘;
        JYM = ‘10X98765432‘;
        // 判断校验位
        M = JYM.substr(Y, 1);
        if (M === idcardArray[17]) {
        // 检测ID的校验位
          return true;
        }
        return false;
      }
      return false;
    default:
      return false;
  }
}

时间: 2024-10-03 02:03:33

身份证校验,绝对严格的相关文章

身份证校验

1 namespace CheckIdenoDemo 2 { 3 class Program 4 { 5 static void Main(string[] args) 6 { 7 Console.WriteLine("请输入您的18位身份证号码:"); 8 string readstring = Console.ReadLine(); 9 10 IdentifyCheck idenCheck = new IdentifyCheck(); 11 12 idenCheck.Identit

java实现身份证校验

原文来自:java教程网 题目:身份证校验 身份证校验 如果让你设计个程序,用什么变量保存身份证号码呢?长整数可以吗?不可以! 因为有人的身份证最后一位是"X" 实际上,除了最后一位的X,不会出现其它字母! 身份证号码18位 = 17位 + 校验码 校验码的计算过程: 例如:身份证前17位 = ABCDEFGHIJKLMNOPQ A~Q 每位数字乘以权值求和(每位数字和它对应的“权”相乘后累加) 17位对应的权值分别是: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8

证件类型为身份证号时进行身份证校验

需求:代办人身份证号改为代办人证件类型(默认为身份证号),后面跟着号码,房主和代办人的证件类型为身份证号时进行身份证校验 sf_ghgl_add.jsp <td class="labelCss">代办人证件类型:</td> <td><select id="zjlx" width="10px" class="easyui-combobox" data-options="url:

JS身份证校验

身份证校验 function identityCodeValid(code) { var city={11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",21:"辽宁",22:"吉林",23:"黑龙江 ",31:"上海",32:"江苏",33:"浙江",34:

最严格的身份证校验(Java版)

上一篇博客贴出了JavaScript版本的身份证校验,本篇博客将贴出Java版的身份证校验:         import java.util.Date; /** * 校验身份证号码是否有效 * * @author GaoHuanjie */         public class CheckCertificateNo { @SuppressWarnings("deprecation") publicstaticvoid main(String[] args) { String ce

最严格的身份证校验(JavaScript版)

在JavaWeb研发过程中为了获取有效的用户信息,校验其数据的有效性非常是必要,以下贴出在项目中用到的关于身份证的校验: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312&quo

1010: 身份证校验

1010: 身份证校验 时间限制: 10 Sec  内存限制: 128 MB提交: 298  解决: 229[提交][状态][讨论版] 题目描述 我国国标[GB 11643-1999]中规定:公民身份号码是18位特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码.其校验码(最后一位)计算方法和步骤为: (1)十七位数字本体码加权求和公式 S = Sum(Ai * Wi), i = 0, ... , 16 

ES01 数据类型、正则表达式、身份证校验

1 基本数据类型 参见W3C的教程即可 2 正则表达式 参考博文:点击前往 3 身份证校验 参考博文:点击前往 <div class="panel panel-primary"> <div class="panel-heading">身份证编号验证</div> <div class="panel-body div_body"> <div class="form_div"&g

身份证校验算法(C语言)

/* 身份证校验算法: 根据各位的权重,求得校验和 对校验和取余(11),求得校验序号 根据校验序号,找到对应的校验码 身份证号最后一位为校验码 */ #include <stdio.h> int g_IDCard[18]={0}; int g_Factor[17]={7, 9, 10, 5, 8,4, 2, 1, 6, 3,7, 9, 10, 5, 8,4, 2}; //身份证号从左到右各位的权重 char Validate[11]={'1', '0', 'X', '9', '8','7',