js身份证号校验

2023-11-08

if (card === '') {
    console.log('请输入身份证号,身份证号不能为空');
    return false;
  }

  if (isCardNo(card) === false) {
    console.log('您输入的身份证号码不正确');
    return false;
  }

  //检查省份  
  if (checkProvince(card, city) === false) {
    console.log('您输入的身份证号码不正确');
    return false;
  }

  //校验生日  
  if (checkBirthday(card) === false) {
    console.log('您输入的身份证号码生日不正确');
    return false;
  }
  //检验位的检测  
  if (checkParity(card) === false) {
    console.log('您的身份证校验位不正确');
    return false;
  }
  return true;
  console.log('OK');

}

//检查号码是否符合规范,包括长度,类型  
function isCardNo(card) {
  //身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X  
  var reg = /(^\d{15}$)|(^\d{17}(\d|X)$)/;
  if (reg.test(card) === false) {
    return false;
  }

  return true;
};

//取身份证前两位,校验省份  
function checkProvince(card, vcity) {
  var province = card.substr(0, 2);
  if (vcity[province] == undefined) {
    return false;
  }
  return true;
};

//检查生日是否正确  
function checkBirthday(card) {
  var len = card.length;
  //身份证15位时,次序为省(3位)市(3位)年(2位)月(2位)日(2位)校验位(3位),皆为数字  
  if (len == '15') {
    var re_fifteen = /^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/;
    var arr_data = card.match(re_fifteen);
    var year = arr_data[2];
    var month = arr_data[3];
    var day = arr_data[4];
    var birthday = new Date('19' + year + '/' + month + '/' + day);
    return verifyBirthday('19' + year, month, day, birthday);
  }
  //身份证18位时,次序为省(3位)市(3位)年(4位)月(2位)日(2位)校验位(4位),校验位末尾可能为X  
  if (len == '18') {
    var re_eighteen = /^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/;
    var arr_data = card.match(re_eighteen);
    var year = arr_data[2];
    var month = arr_data[3];
    var day = arr_data[4];
    var birthday = new Date(year + '/' + month + '/' + day);
    console.log("输出生日", birthday);
    return verifyBirthday(year, month, day, birthday);
  }
  return false;
};

//校验日期  
function verifyBirthday(year, month, day, birthday) {
  var now = new Date();
  var now_year = now.getFullYear();
  //年月日是否合理  
  if (birthday.getFullYear() == year && (birthday.getMonth() + 1) == month && birthday.getDate() == day) {
    //判断年份的范围(0岁到100岁之间)  
    var time = now_year - year;
    if (time >= 0 && time <= 100) {
      return true;
    }
    return false;
  }
  return false;
};

//校验位的检测  
function checkParity(card) {
  //15位转18位  
  card = changeFivteenToEighteen(card);
  var len = card.length;
  if (len == '18') {
    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 cardTemp = 0,
      i, valnum;
    for (i = 0; i < 17; i++) {
      cardTemp += card.substr(i, 1) * arrInt[i];
    }
    valnum = arrCh[cardTemp % 11];
    if (valnum == card.substr(17, 1)) {
      return true;
    }
    return false;
  }
  return false;
};

//15位转18位身份证号  
function changeFivteenToEighteen(card) {
  if (card.length == '15') {
    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 cardTemp = 0,
      i;
    card = card.substr(0, 6) + '19' + card.substr(6, card.length - 6);
    for (i = 0; i < 17; i++) {
      cardTemp += card.substr(i, 1) * arrInt[i];
    }
    card += arrCh[cardTemp % 11];
    return card;
  }
  return card;
};







//身份证截取生日字段
function getBirthday(id) {
  return id.substr(6, 4) + '-' + id.substr(10, 2) + '-' + id.substr(12, 2);
};

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

js身份证号校验 的相关文章

  • 配置docker阿里云镜像加速

    默认情况下docker安装镜像文件是从docker官方的镜像中心下载 https hub docker com 有时速度慢 可以通过配置docker阿里云镜像来加速 配置后 就从国内阿里云下载 注册阿里云用户 登录 gt 工作台 gt 产品
  • 200 ok 几种状态

    浏览器加载资源成功一般会有几种状态 200 ok 从原始服务器请求成功 200 ok from cache 200 ok from disk cache 200 ok from memory cache 304 not modified 向
  • mysql sql语句查询指定月份

    需求 根据输入年月 查询指定数据 方法1 SELECT FROM 表名 WHERE YEAR 列名 年份 AND MONTH 列名 月份 方法2 SELECT FROM 表名 WHERE date format 列名 Y m 2020 01
  • JDBC快速入门,mysql8.0版本+druid+spring jdbc使用,出现因版本错误的解决方法

    JDBC核心技术 JDBC概述 数据持久化 持久化 persistence 把数据保存到可掉电式存储设备中以供之后使用 大多数情况下 特别是企业级应用数据持久化意味着将内存中的数据保存到硬盘上加以 固化 而持久化的实现过程大多通过各种关系数
  • runaway

    runaway函数 这个程序是查看你所用的电脑中所分配的栈的大小 include
  • 解决Java从MySQL读取大量数据时卡…

    今天晚上突然有个服务无法启动 这个服务在启动的时候会从数据库中加载一些数据 查看日志 有开始加载的日志 但没有完成加载的日志 判断问题是在加载数据时卡住 用top查看进程 发现CPU占用为0 又怀疑可能是因为jvm内存不够 用jstat查看
  • js限制输入框字数

  • Ubuntu上配置VS Code调试C++

    直接使用GDB在Ubuntu上调试C code 有时不是很方便 这里介绍下在Ubuntu上通过Visual Studio Code调试C code操作步骤 通过CMake编译 安装所需依赖 1 在Ubuntu上安装Visual Studio
  • Qt学习之QMainWindow(一)QMainWindow简介

    详细的后续会讲到 这里重在理解过程 Qt中的顶层窗口称为MainWindow 属于类QMainWindow QMainWindow也是继承于QWidget 通过子类化QMainWindow可以创建一个应用程序的窗口 MainWindow的结
  • SpringBoot项目使用EasyExcel读取上传Excel

    SpringBoot项目使用EasyExcel读取上传Excel 1 EasyExcel简介 EasyExcel是一个基于Java的简单 省内存的读写Excel的开源项目 在尽可能节约内存的情况下支持读写百M的Excel EasyExcel
  • Mybatis的mapper.xml批量插入、修改sql

    今天要有个功能 要进行一批数据的插入和修改 为了不频繁调用数据库 所以想到了批量插入和修改 因为从毕业后 就没写过批量插入和批量修改 所以在这里记录一下 避免后续再遇到忘记怎么写了 批量插入 传入的参数是List lt 实体 gt list
  • 基于vue-element-ui开发Hproxy项目前端

    hproxy项目前端使用vue element admin框架 页面为hook列表 和一个添加hook页面 添加路由 编辑src router index js文件 在constantRoutes列表追加如下路由内容 path hproxy
  • 【OpenGL】机器人手臂的实现

    一 基本功能 实现了机器人的一只手臂 由上臂 下臂 五根手指共同组成 通过A S D F G键向上旋转 通过a s d f g键向下旋转 通过方向键left和right转向 通过up和down实现放缩 效果图如下 二 实现过程 1 实现手臂
  • 音频编解码G729 PCM

    G 711与G 729的带宽分别是80Kbps和24Kbps 恩奎斯特原理规定声音的采样频率是每秒8000次 每次8bit 语音数据带宽就是64Kbps 8000 8 正常语音包是10ms成帧一次 每两帧成一个包 这样 每秒就成50个包 1
  • mysql连接池唤醒_当MySQL连接池遇上事务(一):神秘的幽灵锁

    MySQL连接池是一个很好的设计 通过将大量短连接转化为少量的长连接 从而提高整个系统的吞吐率 一般各个团队都会对连接池进行封装 只提供简洁的接口供上层使用 在上层看来 并不知道底层是否使用了连接池 甚至连访问数据库的IP和Port都不知道
  • 贪心算法 - java切金条问题 - Kaiqisan

    大家好 都吃晚饭了吗 我是Kaiqisan 是一个已经走出社恐的一般生徒 今天康康一个贪心算法的经典例题 切金条问题 问题 一块金条切成两半 是需要花费和长度数值一样的铜板的 比如长度为20的金条 不管切成长度多大的两半 都要花费20个铜板
  • Ubuntu下编译openwrt

    从网上找的资料 还有自己出现的错误和解决方法 合并整理一下 很多安装时出错以及找解决方法的过程 已经放在另一篇文章里了 下面也放链接了Ubuntu下编译openwrt的过程出错及解决 m0 60027682的博客 CSDN博客 我是跟着视频
  • C 时间转化(秒化时.分.秒)

    写一个函数将以秒计数的时间转换为以时 分 秒计数的时间 函数原型为 char seconds to int seconds 编写main调用测试它 输入格式要求 d 提示信息 请输入时间 秒 n 输出格式要求 d秒合计 s n d小时 d分
  • 代码好坏的评判标准

    从新手接替一个项目开始 来介绍代码的评判维度有哪些 可读性 readability 一般来说 代码被阅读的次数远远超于被编写和执行的次数 代码如果基本符合编码规范 命名清晰 注释详尽 函数的长短合适 模块划分清晰 高内聚低耦合等 基本上代码
  • 出现ModuleNotFoundError:cannot import name ‘is_scalar_nan‘ from ‘sklearn.utils‘的问题

    在最近写能源大数据分析案例时 用到了SimpleImputer库来处理缺失值 由于我电脑上的sklearn库版本较低 先是出现了No module named sklearn impute 的问题 在查阅资料后 使用pip install

随机推荐

  • PWM控制智能小车速度

    用Arduino板子做小车 下面的简单程序基本能实现小车的基本行走 define STOP 0 define FORWARD 1 define BACKWARD 2 define TURNLEFT 3 define TURNRIGHT 4
  • .net 获取HttpContext

    文章目录 在Controller中获取HttpContext 在自定义的服务中获取HttpContext 在Controller中获取HttpContext 可以直接使用HttpContext来获取当前的HttpContext 例如 Htt
  • 关于《Operating Systems: Three Easy Pieces》书中的 #include“common.h“

    之前在读 Operating Systems Three Easy Pieces 这本书的时候里面有代码引用 include common h 原书的代码如下 include
  • java的类学习

    先看下面的代码 span style font size 18px public class Static public int a public String SS public Static a 35 public void Test
  • 大专毕业,从6个月开发转入测试岗位的一些感悟——写在测试岗位3年之际

    时光飞逝 我从前端开发岗位转入测试岗位已经三年了 这期间从迷茫到熟悉 到强化 到熟练 到总结 感受还是很深的 三年前的某一个晚上 我正准备下班回家 我们的项目经理把我叫到办公司和我谈话 谈了很多 具体说什么不记得了 大体意思就是说测试组缺人
  • Linux基础知识点总结

    作者 小刘在C站 个人主页 小刘主页 每天分享云计算网络运维课堂笔记 努力不一定有回报 但一定会有收获加油 一起努力 共赴美好人生 夕阳下 是最美的绽放 树高千尺 落叶归根人生不易 人间真情 目录 前言 Linux 安装系统 服务管理
  • 关于uniapp将H5网页编译为微信小程序样式错乱

    在控制台看了下出现警告Some selectors are not allowed in component wxss including tag name selectors ID selectors and attribute sele
  • jsonpath - 使用 JSONPath 解析 JSON 完整内容详解

    目录 1 操作符 2 函数 3 过滤器运算符 4 Java操作示例 5 阅读文档 何时返回 谓词 6 调整配置 7 Java操作示例源码 json Java 输出 示例2 Java 输出 过滤器示例 Java 输出 JsonPath是一种简
  • python 实现信息熵、条件熵、信息增益、基尼系数

    在这里插入代码片注 该代码为慕课网课程中老师讲解 python import pandas as pd import numpy as np import math 计算信息熵 def getEntropy s 找到各个不同取值出现的次数
  • 相机系统综述 —— ISP

    转 http kernel meizu com camera isp intro html ISP Image Signal Processor 即图像信号处理器 用于处理图像信号传感器输出的图像信号 它在相机系统中占有核心主导的地位 是构
  • 网络 — MB/s、Mb/s、Mbps、Mbit/s、Kbps

    MB s 兆字节每秒 Mb s 兆比特每秒 Mbps 兆比特每秒 Mbit s 兆比特每秒 Kbps 千比特每秒 1Byte 字节 8 bit 比特 1B 8b 1MB 百万字节也称兆字节 8 Mb 1Mb 0 125MB 1Kb 1024
  • java yyyy-mm-dd 日期格式_Java中的日期时间格式化

    原标题 Java中的日期时间格式化 1 Java日期时间格式化的概念 我们在日常的开发过程中常常会碰到关于日期时间的计算与存储问题 比如我们要把一个当前时间类型转换成字符串类型 我们会直接使用Util包下的Date数据类型 java uti
  • unity Screen.width, Screen.height

    如果事从编译器调用这个函数 获取的值不正确 获取的是editorwindow的大小
  • 国产自主研发,完全可控 IDE!

    最近 互联网上逐渐有些热闹 日本福岛核废水排海计划 中国自主研发 IDE 作为一名开发者 自然好奇国产自主研发的 IDE 不禁夸赞吾国威武 某方面领域越来越强 该产品名为 CEC IDE 是由数字广东公司联合麒麟软件打造国内首款适配国产操作
  • 乐高叉车wedo教案_24乐高教育wedo编程摩天轮教案

    1 人小组 时长 1 5 活动目标 巩固对三角形结构的稳定性的认识 认识重力的方向是垂直向下 活动准备 9886 套装 摩天轮图片 活动过程 备注 联 系 20 一 互动问大家去游乐园座过摩天轮没有 二 看视频了解摩天轮能座在上面旋转 很高
  • dotnet java_我所理解的JAVA和 DotNet

    Java 从实用性来讲 Java 可以说是第一种 网页 语言 尽管像 Perl 等语言会突然发现它们处理字符串的能力在恢复价值和发送 HTML 到网页浏览器上是天生的 但是 Java 是最早发现自己是根植于浏览器中 最初是在一个有趣但却非常
  • Python基础知识点总结

    https www cnblogs com wu chao p 8421708 html Python中pass语句的作用是什么 pass语句不会执行任何操作 一般作为占位符或者创建占位程序 Python是如何进行类型转换的 Python提
  • python下的pyecharts应用4----绘制cpu折线图

    要求 1 截止到运行一刻 2 每秒钟监测 3 绘制折线图 设计 获取cpu的代码如下 1 获取系统cpu占有率的信息 import psutil import time 隔1s绘制cpu的占有率 gt 持久化的保存 如何将时间和对应的cpu
  • html5 页面可以上下滚动条,h5页面上下左右滑动

    var startX 0 startY 0 operate 0 backDom addEventListener touchstart function evt evt preventDefault var touch evt touche
  • js身份证号校验

    if card console log 请输入身份证号 身份证号不能为空 return false if isCardNo card false console log 您输入的身份证号码不正确 return false 检查省份 if c