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博客提供的服务),相关样式可以参考截图或 ...
随机推荐
- DEDE采集时自动生成摘要和关键字
1.修改 include/dedecollection.class.php //自动分析关键字和摘要 preg_match("/<meta[\s]+name=['\"]key ...
- Helvetic Coding Contest 2018 online mirror (teams allowed, unrated)F3 - Lightsabers (hard)
题意:n个数字1-m,问取k个组成的set方案数 题解:假设某个数出现k次,那么生成函数为\(1+x+...+x^k\),那么假设第i个数出现ai次,结果就是\(\sum_{i=1}^m(1+x+.. ...
- Kubernetes的包管理工具Helm的安装和使用
1.源码安装 [root@master ~]# wget https://storage.googleapis.com/kubernetes-helm/helm-v2.14.0-linux-amd64 ...
- elasticsearch+filebeat+kibana提取多行日志
filebeat的配置文件filebeat.yml以下三行去掉注释 multiline.pattern: ^\[ multiline.negate: true //false改为true multil ...
- duilib教程之duilib入门简明教程8.完整的自绘标题栏
看了前面那么多教程,相信对duilib已有基本映像了,我们就快马加鞭,做出一个完整的自绘标题栏吧~ 看到下面这个效果图,小伙伴们是不是有点惊呆了呢~O(∩_∩)O~ duilib实现以 ...
- vue知识点汇总
一.学习vue必须了解的几个知识点 1.node.js介绍 node是一个让JavaScript运行在服务端的开发平台,使用JavaScript也可以开发后台服务.说明白些它仅仅是一个平台,我们使用 ...
- js 忘记密码发送短信记录cookie
<div class="forgetPwdBox" style="display:none"> <div class="forTit ...
- hdu多校第四场 1003 (hdu6616) Divide the Stones 机智题
题意: 给你重量分别为1到n的n个石头,让你分成重量相等,数量也相等的k组,保证k是n的约数.问你能不能分配,如果能,输出具体的分配方案. 题解: 首先,如果1到n之和不能整除k,那么一定不能如题意分 ...
- 【转载】一定要会用selenium的等待,三种等待方式必会
转载地址:http://blog.csdn.net/huilan_same/article/details/52544521,感谢博文,学习了 原文: 发现太多人不会用等待了,博主今天实在是忍不住要给 ...
- USACO 2008 November Gold Cheering up the Cows /// MST oj24381
题目大意: 输入n,p:n个点,p条路 接下来n行输入c[]:在各个点需要花费的时间 接下来p行输入u,v,w:u点到v点的路需要花费时间w 求经过所有点且最后回到起点的最少花费时间 https:// ...