js身份证号码验证(小程序版)
参考知乎专栏文章https://zhuanlan.zhihu.com/p/22949023
- <view class='bgw'>
- <form>
- ......
- <view class='ipt-wrapper'>
- <view class='ipt-l'>身份证</view>
- <view class='ipt-r'>
- <input type='text' placeholder='请输入您的身份证号' name="idcard" value='{{idcard}}' bindinput="bindIdcard"/>
- <image src='{{icon}}' class='right-arrow'></image>
- </view>
- </view>
- .....
- </form>
- </view>
- <view class='submit' bindtap='submit'>提交预约</view>
- <!-- 弹出层 -->
- <view class='mask' wx:if="{{maskState}}" bindtap='hidelayer'></view>
- <!-- 表单出错 -->
- <view class='layer' wx:if="{{warnState}}">
- <image src='{{excitedicon}}' class='infoicon'></image>
- <view class='info'>{{errorinfo}}</view>
- <view class='btn-small' bindtap='hidelayer'>好的</view>
- </view>
- ....
- var Wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1]; // 加权因子
- var ValideCode = [1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2];
- Page({
- /**
- * 页面的初始数据
- */
- data: {
- name: '',
- phone: '',
- idcard: '',
- errorinfo: '',
- maskState: false,
- warnState: false,
- },
- // 关闭弹出层
- hidelayer:function(){
- this.setData({
- maskState: false,
- warnState: false,
- errState: false,
- okState: false
- })
- },
- // 表单提交
- submit:function(){
- var idcard = this.data.idcard;
- var reg = /^1\d{10}$/;
- if (this.isBlank(idcard)) {
- this.setData({
- maskState: true,
- warnState: true,
- errorinfo: '身份证号不能为空'
- })
- return
- }
- if (!this.IdCardValidate(idcard)){
- this.setData({
- maskState: true,
- warnState: true,
- errorinfo: '身份证号格式错误'
- })
- return
- }
- },
- IdCardValidate:function (idCard) {
- idCard = this.trim(idCard.replace(/ /g, "")); //去掉字符串头尾空格
- if(idCard.length == 15) {
- return this.isValidityBrithBy15IdCard(idCard); //进行15位身份证的验证
- } else if (idCard.length == 18) {
- var a_idCard = idCard.split(""); // 得到身份证数组
- if (this.isValidityBrithBy18IdCard(idCard) && this.isTrueValidateCodeBy18IdCard(a_idCard)) { //进行18位身份证的基本验证和第18位的验证
- return true;
- } else {
- return false;
- }
- } else {
- return false;
- }
- },
- /**
- * 判断身份证号码为18位时最后的验证位是否正确
- * @param a_idCard 身份证号码数组
- * @return
- */
- isTrueValidateCodeBy18IdCard:function(a_idCard) {
- var sum = 0; // 声明加权求和变量
- if (a_idCard[17].toLowerCase() == 'x') {
- a_idCard[17] = 10; // 将最后位为x的验证码替换为10方便后续操作
- }
- for (var i = 0; i < 17; i++) {
- sum += Wi[i] * a_idCard[i]; // 加权求和
- }
- var valCodePosition = sum % 11; // 得到验证码所位置
- if (a_idCard[17] == ValideCode[valCodePosition]) {
- return true;
- } else {
- return false;
- }
- },
- /**
- * 验证18位数身份证号码中的生日是否是有效生日
- * @param idCard 18位书身份证字符串
- * @return
- */
- isValidityBrithBy18IdCard:function (idCard18) {
- var year = idCard18.substring(6, 10);
- var month = idCard18.substring(10, 12);
- var day = idCard18.substring(12, 14);
- var temp_date = new Date(year, parseFloat(month) - 1, parseFloat(day));
- // 这里用getFullYear()获取年份,避免千年虫问题
- if (temp_date.getFullYear() != parseFloat(year)
- || temp_date.getMonth() != parseFloat(month) - 1
- || temp_date.getDate() != parseFloat(day)) {
- return false;
- } else {
- return true;
- }
- },
- /**
- * 验证15位数身份证号码中的生日是否是有效生日
- * @param idCard15 15位书身份证字符串
- * @return
- */
- isValidityBrithBy15IdCard:function (idCard15) {
- var year = idCard15.substring(6, 8);
- var month = idCard15.substring(8, 10);
- var day = idCard15.substring(10, 12);
- var temp_date = new Date(year, parseFloat(month) - 1, parseFloat(day));
- // 对于老身份证中的你年龄则不需考虑千年虫问题而使用getYear()方法
- if (temp_date.getYear() != parseFloat(year)
- || temp_date.getMonth() != parseFloat(month) - 1
- || temp_date.getDate() != parseFloat(day)) {
- return false;
- } else {
- return true;
- }
- },
- //去掉字符串头尾空格
- trim:function (str) {
- return str.replace(/(^\s*)|(\s*$)/g, "");
- },
- // 判断是否为空
- isBlank:function(_value) {
- if (_value == null || _value == "" || _value == undefined) {
- return true;
- }
- return false;
- },
- bindIdcard: function (e) {
- this.setData({
- idcard: e.detail.value
- })
- },
- })
js身份证号码验证(小程序版)的更多相关文章
- js身份证号码验证
验证身份证号码的有效性,包含15位和18位: 根据[中华人民共和国国家标准 GB 11643-1999]中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成.排列 ...
- JS 身份证号码验证
function checkIdcard(idcard) { var Errors = new Array( "验证通过!", "身份证号码位数不对!", &q ...
- js正则实现二代身份证号码验证详解
js正则实现二代身份证号码验证详解 根据[中华人民共和国国家标准 GB 11643-1999]中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至 ...
- 七天开发进度(七)(微信小程序版(二)记账本)
终于把小程序版弄完了,不过这并不能称之为是我的作品,因为我还没有彻底学会小程序,对JavaScript语言还有很多不会的地方,没有掌握, 这次的程序是通过学习网上的多个教程,多个案例结合拼凑模仿者人家 ...
- C#实现身份证号码验证的方法
本文实例讲述了C#实现身份证号码验证的方法.分享给大家供大家参考.具体实现方法如下: 随着现在互联网的发展,越来越多的注册用户的地方都用到了身份证,那么对于输入的身份证如何验证呢?看下面的代码,其实很 ...
- 是否以某字符串结尾 是否以某字符串开始 是否是整数 裁减字符串空格 是否是浮点数 是否所有字符为数字类型 是否为空 是否是EMAIL 是否是电话号码 身份证号码验证-支持新的带x身份证 日期验证
/* 1.是否以某字符串结尾 endsWith(theStr,endStr) @param theStr:要判断的字符串 @param endStr:以此字符串结尾 @return boolean; ...
- 微信小程序版2048
最近流行微信"跳一跳"小游戏,我也心血来潮写了一个微信小程序版2048,本篇文章主要分享实现2048的算法以及注意的点,一起来学习吧!(源码地址见文章末尾) 算法 1.生成4* ...
- Java 身份证号码验证
身份证号码验证 1.号码的结构 公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码 2.地址码(前 ...
- 微信小程序版博客——开发汇总总结(附源码)
花了点时间陆陆续续,拼拼凑凑将我的小程序版博客搭建完了,这里做个简单的分享和总结. 整体效果 对于博客来说功能页面不是很多,且有些限制于后端服务(基于ghost博客提供的服务),相关样式可以参考截图或 ...
随机推荐
- thinkphp 闭包支持
闭包定义 我们可以使用闭包的方式定义一些特殊需求的路由,而不需要执行控制器的操作方法了,例如: 'URL_ROUTE_RULES'=>array( 'test' => function() ...
- (转)SQL盲注攻击的简单介绍
转:http://hi.baidu.com/duwang1104/item/65a6603056aee780c3cf2968 1 简介 1.1 普通SQL注入技术概述 目前没有对SQL ...
- winform的datagridview控件滚动更新数据
范例源码下载地址:http://files.cnblogs.com/files/luoxiaozhao/PrintDemo.rar
- HDU-1501-Zipper-字符串的dfs
Given three strings, you are to determine whether the third string can be formed by combining the ch ...
- Selenium+Webdriver被检测识别出来的应对方案
在写爬虫,面对很多js 加载的页面,很多人束手无策,更多的人喜欢用Senlenium+ Webdriver,古语有云:道高一尺魔高一丈.已淘宝为首,众多网站都针对 Selenium的js监测机制, 比 ...
- js比较常用的
1. <a href="javascript:void(0);" id="div1_bu" >点击链接可以删除div2</a> 超链接的 ...
- 手把手教你 GitLab 的安装及使用(转)
深山田 关注 2018.01.30 22:58 字数 1696 阅读 15559评论 2喜欢 15 前言 新入职公司,发现公司还在使用落后生产工具 svn,由于重度使用过 svn 和 git ,知道这 ...
- ztree 树状图——例
效果: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta ...
- Linux 实用指令(8)--网络配置
目录 网络配置 1 Linux网络配置原理图(含虚拟机) 2 查看网络IP和网关 2.1 查询虚拟网络编辑器 2.2 修改IP地址(修改虚拟网络的IP) 2.3 查看网关 2.4 查看windows环 ...
- 【学术篇】luogu2778 [AHOI2016初中组]迷宫(代码高能!)
好久好久我都没有刷题了. 题目の传送门:https://www.luogu.org/problem/show?pid=2778 题目大意:(啥 题目讲得不够清楚?)平面内有n个以整点(就是坐标都是整数 ...