参考知乎专栏文章https://zhuanlan.zhihu.com/p/22949023

  1. <view class='bgw'>
  2. <form>
  3. ......
  4. <view class='ipt-wrapper'>
  5. <view class='ipt-l'>身份证</view>
  6. <view class='ipt-r'>
  7. <input type='text' placeholder='请输入您的身份证号' name="idcard" value='{{idcard}}' bindinput="bindIdcard"/>
  8. <image src='{{icon}}' class='right-arrow'></image>
  9. </view>
  10. </view>
  11. .....
  12. </form>
  13. </view>
  14. <view class='submit' bindtap='submit'>提交预约</view>
  15. <!-- 弹出层 -->
  16. <view class='mask' wx:if="{{maskState}}" bindtap='hidelayer'></view>
  17. <!-- 表单出错 -->
  18. <view class='layer' wx:if="{{warnState}}">
  19. <image src='{{excitedicon}}' class='infoicon'></image>
  20. <view class='info'>{{errorinfo}}</view>
  21. <view class='btn-small' bindtap='hidelayer'>好的</view>
  22. </view>
  23. ....
  1. var Wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1]; // 加权因子
  2. var ValideCode = [1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2];
  3. Page({
  4.  
  5. /**
  6. * 页面的初始数据
  7. */
  8. data: {
  9. name: '',
  10. phone: '',
  11. idcard: '',
  12. errorinfo: '',
  13. maskState: false,
  14. warnState: false,
  15.  
  16. },
  17. // 关闭弹出层
  18. hidelayer:function(){
  19. this.setData({
  20. maskState: false,
  21. warnState: false,
  22. errState: false,
  23. okState: false
  24. })
  25. },
  26. // 表单提交
  27. submit:function(){
  28. var idcard = this.data.idcard;
  29. var reg = /^1\d{10}$/;
  30.  
  31. if (this.isBlank(idcard)) {
  32. this.setData({
  33. maskState: true,
  34. warnState: true,
  35. errorinfo: '身份证号不能为空'
  36. })
  37. return
  38. }
  39. if (!this.IdCardValidate(idcard)){
  40. this.setData({
  41. maskState: true,
  42. warnState: true,
  43. errorinfo: '身份证号格式错误'
  44. })
  45. return
  46. }
  47.  
  48. },
  49. IdCardValidate:function (idCard) {
  50. idCard = this.trim(idCard.replace(/ /g, "")); //去掉字符串头尾空格
  51. if(idCard.length == 15) {
  52. return this.isValidityBrithBy15IdCard(idCard); //进行15位身份证的验证
  53. } else if (idCard.length == 18) {
  54. var a_idCard = idCard.split(""); // 得到身份证数组
  55. if (this.isValidityBrithBy18IdCard(idCard) && this.isTrueValidateCodeBy18IdCard(a_idCard)) { //进行18位身份证的基本验证和第18位的验证
  56. return true;
  57. } else {
  58. return false;
  59. }
  60. } else {
  61. return false;
  62. }
  63. },
  64. /**
  65. * 判断身份证号码为18位时最后的验证位是否正确
  66. * @param a_idCard 身份证号码数组
  67. * @return
  68. */
  69. isTrueValidateCodeBy18IdCard:function(a_idCard) {
  70. var sum = 0; // 声明加权求和变量
  71. if (a_idCard[17].toLowerCase() == 'x') {
  72. a_idCard[17] = 10; // 将最后位为x的验证码替换为10方便后续操作
  73. }
  74. for (var i = 0; i < 17; i++) {
  75. sum += Wi[i] * a_idCard[i]; // 加权求和
  76. }
  77. var valCodePosition = sum % 11; // 得到验证码所位置
  78. if (a_idCard[17] == ValideCode[valCodePosition]) {
  79. return true;
  80. } else {
  81. return false;
  82. }
  83. },
  84. /**
  85. * 验证18位数身份证号码中的生日是否是有效生日
  86. * @param idCard 18位书身份证字符串
  87. * @return
  88. */
  89. isValidityBrithBy18IdCard:function (idCard18) {
  90. var year = idCard18.substring(6, 10);
  91. var month = idCard18.substring(10, 12);
  92. var day = idCard18.substring(12, 14);
  93. var temp_date = new Date(year, parseFloat(month) - 1, parseFloat(day));
  94. // 这里用getFullYear()获取年份,避免千年虫问题
  95. if (temp_date.getFullYear() != parseFloat(year)
  96. || temp_date.getMonth() != parseFloat(month) - 1
  97. || temp_date.getDate() != parseFloat(day)) {
  98. return false;
  99. } else {
  100. return true;
  101. }
  102. },
  103. /**
  104. * 验证15位数身份证号码中的生日是否是有效生日
  105. * @param idCard15 15位书身份证字符串
  106. * @return
  107. */
  108. isValidityBrithBy15IdCard:function (idCard15) {
  109. var year = idCard15.substring(6, 8);
  110. var month = idCard15.substring(8, 10);
  111. var day = idCard15.substring(10, 12);
  112. var temp_date = new Date(year, parseFloat(month) - 1, parseFloat(day));
  113. // 对于老身份证中的你年龄则不需考虑千年虫问题而使用getYear()方法
  114. if (temp_date.getYear() != parseFloat(year)
  115. || temp_date.getMonth() != parseFloat(month) - 1
  116. || temp_date.getDate() != parseFloat(day)) {
  117. return false;
  118. } else {
  119. return true;
  120. }
  121. },
  122. //去掉字符串头尾空格
  123. trim:function (str) {
  124. return str.replace(/(^\s*)|(\s*$)/g, "");
  125. },
  126. // 判断是否为空
  127. isBlank:function(_value) {
  128. if (_value == null || _value == "" || _value == undefined) {
  129. return true;
  130. }
  131. return false;
  132. },
  133. bindIdcard: function (e) {
  134. this.setData({
  135. idcard: e.detail.value
  136. })
  137. },
  138.  
  139. })

js身份证号码验证(小程序版)的更多相关文章

  1. js身份证号码验证

    验证身份证号码的有效性,包含15位和18位: 根据[中华人民共和国国家标准 GB 11643-1999]中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成.排列 ...

  2. JS 身份证号码验证

    function checkIdcard(idcard) { var Errors = new Array( "验证通过!", "身份证号码位数不对!", &q ...

  3. js正则实现二代身份证号码验证详解

    js正则实现二代身份证号码验证详解 根据[中华人民共和国国家标准 GB 11643-1999]中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至 ...

  4. 七天开发进度(七)(微信小程序版(二)记账本)

    终于把小程序版弄完了,不过这并不能称之为是我的作品,因为我还没有彻底学会小程序,对JavaScript语言还有很多不会的地方,没有掌握, 这次的程序是通过学习网上的多个教程,多个案例结合拼凑模仿者人家 ...

  5. C#实现身份证号码验证的方法

    本文实例讲述了C#实现身份证号码验证的方法.分享给大家供大家参考.具体实现方法如下: 随着现在互联网的发展,越来越多的注册用户的地方都用到了身份证,那么对于输入的身份证如何验证呢?看下面的代码,其实很 ...

  6. 是否以某字符串结尾 是否以某字符串开始 是否是整数 裁减字符串空格 是否是浮点数 是否所有字符为数字类型 是否为空 是否是EMAIL 是否是电话号码 身份证号码验证-支持新的带x身份证 日期验证

    /* 1.是否以某字符串结尾 endsWith(theStr,endStr) @param theStr:要判断的字符串 @param endStr:以此字符串结尾 @return boolean; ...

  7. 微信小程序版2048

    最近流行微信"跳一跳"小游戏,我也心血来潮写了一个微信小程序版2048,本篇文章主要分享实现2048的算法以及注意的点,一起来学习吧!(源码地址见文章末尾)   算法 1.生成4* ...

  8. Java 身份证号码验证

    身份证号码验证 1.号码的结构 公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码 2.地址码(前 ...

  9. 微信小程序版博客——开发汇总总结(附源码)

    花了点时间陆陆续续,拼拼凑凑将我的小程序版博客搭建完了,这里做个简单的分享和总结. 整体效果 对于博客来说功能页面不是很多,且有些限制于后端服务(基于ghost博客提供的服务),相关样式可以参考截图或 ...

随机推荐

  1. DEDE采集时自动生成摘要和关键字

    1.修改 include/dedecollection.class.php //自动分析关键字和摘要 preg_match("/<meta[\s]+name=['\"]key ...

  2. 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+.. ...

  3. Kubernetes的包管理工具Helm的安装和使用

    1.源码安装 [root@master ~]# wget https://storage.googleapis.com/kubernetes-helm/helm-v2.14.0-linux-amd64 ...

  4. elasticsearch+filebeat+kibana提取多行日志

    filebeat的配置文件filebeat.yml以下三行去掉注释 multiline.pattern: ^\[ multiline.negate: true //false改为true multil ...

  5. duilib教程之duilib入门简明教程8.完整的自绘标题栏

    看了前面那么多教程,相信对duilib已有基本映像了,我们就快马加鞭,做出一个完整的自绘标题栏吧~    看到下面这个效果图,小伙伴们是不是有点惊呆了呢~O(∩_∩)O~      duilib实现以 ...

  6. vue知识点汇总

    一.学习vue必须了解的几个知识点  1.node.js介绍 node是一个让JavaScript运行在服务端的开发平台,使用JavaScript也可以开发后台服务.说明白些它仅仅是一个平台,我们使用 ...

  7. js 忘记密码发送短信记录cookie

    <div class="forgetPwdBox" style="display:none"> <div class="forTit ...

  8. hdu多校第四场 1003 (hdu6616) Divide the Stones 机智题

    题意: 给你重量分别为1到n的n个石头,让你分成重量相等,数量也相等的k组,保证k是n的约数.问你能不能分配,如果能,输出具体的分配方案. 题解: 首先,如果1到n之和不能整除k,那么一定不能如题意分 ...

  9. 【转载】一定要会用selenium的等待,三种等待方式必会

    转载地址:http://blog.csdn.net/huilan_same/article/details/52544521,感谢博文,学习了 原文: 发现太多人不会用等待了,博主今天实在是忍不住要给 ...

  10. USACO 2008 November Gold Cheering up the Cows /// MST oj24381

    题目大意: 输入n,p:n个点,p条路 接下来n行输入c[]:在各个点需要花费的时间 接下来p行输入u,v,w:u点到v点的路需要花费时间w 求经过所有点且最后回到起点的最少花费时间 https:// ...