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

2024-06-11 02:48

本文主要是介绍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 ? "男" : "女")
}

这篇关于js校验15位/18位身份证件号(地区、生日、性别)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1050000

相关文章

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件

EasyPlayer.js网页H5 Web js播放器能力合集

最近遇到一个需求,要求做一款播放器,发现能力上跟EasyPlayer.js基本一致,满足要求: 需求 功性能 分类 需求描述 功能 预览 分屏模式 单分屏(单屏/全屏) 多分屏(2*2) 多分屏(3*3) 多分屏(4*4) 播放控制 播放(单个或全部) 暂停(暂停时展示最后一帧画面) 停止(单个或全部) 声音控制(开关/音量调节) 主辅码流切换 辅助功能 屏

使用JS/Jquery获得父窗口的几个方法(笔记)

<pre name="code" class="javascript">取父窗口的元素方法:$(selector, window.parent.document);那么你取父窗口的父窗口的元素就可以用:$(selector, window.parent.parent.document);如题: $(selector, window.top.document);//获得顶级窗口里面的元素 $(

js异步提交form表单的解决方案

1.定义异步提交表单的方法 (通用方法) /*** 异步提交form表单* @param options {form:form表单元素,success:执行成功后处理函数}* <span style="color:#ff0000;"><strong>@注意 后台接收参数要解码否则中文会导致乱码 如:URLDecoder.decode(param,"UTF-8")</strong></span>

js react 笔记 2

起因, 目的: 记录一些 js, react, css 1. 生成一个随机的 uuid // 需要先安装 crypto 模块const { randomUUID } = require('crypto');const uuid = randomUUID();console.log(uuid); // 输出类似 '9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d'

学习记录:js算法(二十八):删除排序链表中的重复元素、删除排序链表中的重复元素II

文章目录 删除排序链表中的重复元素我的思路解法一:循环解法二:递归 网上思路 删除排序链表中的重复元素 II我的思路网上思路 总结 删除排序链表中的重复元素 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 图一 图二 示例 1:(图一)输入:head = [1,1,2]输出:[1,2]示例 2:(图