`
caibowen0414010001
  • 浏览: 7840 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
文章分类
社区版块
存档分类
最新评论

js校验15位/18位身份证件号(地区、生日、性别)

 
阅读更多

var 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 : "国外"
}

/**
 * 校验身份证号码(15位/18位)
 */
function isIdCardNo(num) {
 num = num.toUpperCase();
 //身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X。
 if (!(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(num))) {
  alert('身份证号长度不对,或者号码不符合规定!15位号码应全为数字,18位号码末位可以为数字或X。');
  return false;
 }
 //下面分别分析出生日期和校验位
 var len = num.length;
 if (len == 15) {
  re = new RegExp(/^(\d{2})(\d{4})(\d{2})(\d{2})(\d{2})(\d{3})$/);
  var arrSplit = num.match(re);
  if (aCity[parseInt(arrSplit[1])] == null) {
   return "15位身份证的地区非法";
  }
  //检查生日日期是否正确
  var dtmBirth = new Date("19" + arrSplit[3] + "/" + arrSplit[4] + "/" + arrSplit[5]);
  var bGoodDay;
  bGoodDay = (dtmBirth.getYear() == Number(arrSplit[3])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[4])) && (dtmBirth.getDate() == Number(arrSplit[5]));
  if (!bGoodDay) {
   alert('15位身份证的生日非法');
   return false;
  }
 }
 if (len == 18) {
  re = new RegExp(/^(\d{2})(\d{4})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/);
  var arrSplit = num.match(re);
  if (aCity[parseInt(arrSplit[1])] == null) {
   return "18位身份证的地区非法";
  }
  //检查生日日期是否正确
  var dtmBirth = new Date(arrSplit[3] + "/" + arrSplit[4] + "/" + arrSplit[5]);
  var bGoodDay;
  bGoodDay = (dtmBirth.getFullYear() == Number(arrSplit[3])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[4])) && (dtmBirth.getDate() == Number(arrSplit[5]));
  if (!bGoodDay) {
   alert('18位身份证的生日非法');
   return false;
  } else {
   //检验18位身份证的校验码是否正确。
   //校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
   var valnum;
   var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
   var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
   var nTemp = 0,
   i;
   for (i = 0; i < 17; i++) {
    nTemp += num.substr(i, 1) * arrInt[i];
   }
   valnum = arrCh[nTemp % 11];
   if (valnum != num.substr(17, 1)) {
    alert('18位身份证的校验码不正确!末位应为:' + valnum);
    return false;
   }
  }
 }
 return true;
}

/**
 * 18身份证号码 获取地区、出生年月、性别
 */
function cidInfo(sId) {
 return aCity[parseInt(sId.substr(0, 2))] + "," + sBirthday + "," + (sId.substr(16, 1) % 2 ? "男" : "女")
}

分享到:
评论

相关推荐

    SQL15位和18位公民身份证校验函数

    ### SQL15位和18位公民身份证校验函数知识点详解 #### 一、背景介绍 在进行数据录入时,确保身份证信息的合法性至关重要。不正确的身份证信息将导致数据的有效性和准确性大打折扣。为此,设计了一款专门用于校验15...

    js根据身份证判断性别和生日

    本篇文章将详细讲解如何使用JavaScript来实现根据15位或18位身份证号码判断性别和生日。 首先,身份证号码的第17位数字用于判断性别。如果该数字为奇数,则表示该人是男性;如果是偶数,则表示该人是女性。例如,...

    Linux shell编程 验证身份证号码(15/18)

    - **Part2**: 身份证号码验证函数`verify`,首先检查长度是否合法(15或18位),然后检查前17位是否符合规定的数字范围,接着对18位身份证号码进行校验码验证,最后通过生日字段检查出生日期的有效性。 - **Part3**...

    C#通過身份證號獲取年齡,性別,生日 支持15位,18位

    - 18位身份证号码:在15位的基础上增加了校验位,6位地区码,8位出生日期码,4位顺序码和1位校验码。 2. **日期转换** - 在C#中,将身份证号码中的日期部分转换为日期对象,可以使用`DateTime.TryParseExact`方法...

    js身份证号与性别校验

    2. **转换15位身份证号到18位**:对于15位的身份证号码,可以通过在末尾添加'19'和计算出的校验码来升级为18位。 ```javascript function upgradeTo18(idCard) { if (idCard.length === 15) { let prefix = '19';...

    javascript身份证号码验证-支持15位和18位带x身份证

    本篇将详细探讨如何使用JavaScript进行15位和18位,特别是18位带有字母“X”的身份证号码的验证。 首先,我们需要理解身份证号码的结构。15位身份证号码由6位地区码、7位出生日期码和2位顺序码组成;18位身份证号码...

    js校验身份证号和银行卡号

    在中国,身份证号码由18位数字组成,前6位代表地区代码,接着的8位表示出生日期,第17位代表性别(奇数为男,偶数为女),最后一位是校验码,可能为0-9或X。验证身份证号的JavaScript函数通常会检查其长度、格式以及...

    oracle 身份证号码校验函数

    Oracle身份证号码校验函数,可以将15位身份号码升为18位,检验出生年月等信息

    Java校验身份证号码工具类 ---运行几年了,很靠谱。包含15位身份证校验

    Java校验身份证号码工具类 ---运行几年了,很靠谱。包含15位身份证校验Java校验身份证号码工具类 ---运行几年了,很靠谱。包含15位身份证校验

    js身份证号码获取性别、出生日期、籍贯省市.zip

    这个压缩包文件“js身份证号码获取性别、出生日期、籍贯省市.zip”包含了一个JavaScript方法,用于从身份证号码中提取这些关键数据。下面我们将详细探讨如何通过身份证号码获取这些信息以及背后的逻辑。 首先,中国...

    pb验证身份证号输入的正确性(可以对身份证号码的第18位校验位进行判断)

    pb验证身份证号输入的正确性(可以对身份证号码的第18位校验位进行判断) 源码 pb验证身份证号输入的正确性(可以对身份证号码的第18位校验位进行判断) 源码 pb验证身份证号输入的正确性(可以对身份证号码的第18位...

    集装箱号计算校验位

    ### 集装箱号计算校验位 在物流行业中,集装箱作为一种重要的货物运输单元,其编号系统的设计和实现对于确保物流过程中的准确性和安全性至关重要。集装箱号通常由字母和数字组成,为了验证集装箱号的有效性,一般会...

    一个完整身份证效验程序 。公民身份号码是特征组合码18位:由十七位数字本体码和一位数字校验码组成。

    身份证验证程序是一个用于确认输入的18位公民身份号码(身份证号)真实性和合法性的软件工具。在中国,每个公民都有一个独特的身份证号,它由17位数字本体码和1位数字校验码构成,形成一个18位的特征组合码。这个...

    JAVA身份证号码校验类

    针对身份证号码的校验,以及能自动将身份证从15位升级为18位

    js javaScript 验证校验小工具包

    这个"js javaScript 验证校验小工具包"显然是一个集合了各种JavaScript验证和校验功能的资源库,旨在帮助开发者更方便地处理表单验证、数据格式检查等常见任务。 在前端开发中,验证和校验通常涉及以下几个方面: ...

    银行卡号正则校验js工具类

    银行卡号正则校验js工具类

    正则表达式校验身份证号码

    身份证号码分为15位和18位两种格式,其中18位号码是在15位基础上增加了一个4位出生年份以及一位校验码。本文将详细介绍如何使用正则表达式进行身份证号码的有效性和合理性验证。 #### 简单校验:正则表达式的使用 ...

    PHP校验15位和18位身份证号的类封装

    如果强制要求是 18 位的话,会比较好,因为 15 位的身份证号没有校验码,可以说,只要了解大概结构,随手都可以造出一系列身份证号码来。 当然,如果只是单纯的程序校验, 18 位的身份证号码也可以伪造,就是需要...

    条码校验位计算工具

    本文将深入探讨条形码的校验位计算方法,特别是13位和18位条码的校验位计算。 首先,13位条码,也称为EAN-13条码,通常用于全球贸易项目代码(GTIN)。它的结构分为三部分:前三位是国家代码,接着四位是制造商代码...

Global site tag (gtag.js) - Google Analytics