1 //银行卡号Luhn校验算法
 2 //luhn校验规则:16位银行卡号(19位通用):
 3 //1.将未带校验位的 15(或18)位卡号从右依次编号 1 到 15(18),位于奇数位号上的数字乘以 2。
 4 //2.将奇位乘积的个十位全部相加,再加上所有偶数位上的数字。
 5 //3.将加法和加上校验位能被 10 整除。
 6
 7 //bankno为银行卡号
 8  function luhnCheck(bankno){
 9      var lastNum=bankno.substr(bankno.length-1,1);//取出最后一位(与luhn进行比较)
10
11      var first15Num=bankno.substr(0,bankno.length-1);//前15或18位
12      var newArr=new Array();
13      for(var i=first15Num.length-1;i>-1;i--){    //前15或18位倒序存进数组
14          newArr.push(first15Num.substr(i,1));
15      }
16      var arrJiShu=new Array();  //奇数位*2的积 <9
17      var arrJiShu2=new Array(); //奇数位*2的积 >9
18
19      var arrOuShu=new Array();  //偶数位数组
20      for(var j=0;j<newArr.length;j++){
21          if((j+1)%2==1){//奇数位
22              if(parseInt(newArr[j])*2<9)
23              arrJiShu.push(parseInt(newArr[j])*2);
24              else
25              arrJiShu2.push(parseInt(newArr[j])*2);
26          }
27          else //偶数位
28          arrOuShu.push(newArr[j]);
29      }
30
31      var jishu_child1=new Array();//奇数位*2 >9 的分割之后的数组个位数
32      var jishu_child2=new Array();//奇数位*2 >9 的分割之后的数组十位数
33      for(var h=0;h<arrJiShu2.length;h++){
34          jishu_child1.push(parseInt(arrJiShu2[h])%10);
35          jishu_child2.push(parseInt(arrJiShu2[h])/10);
36      }
37
38      var sumJiShu=0; //奇数位*2 < 9 的数组之和
39      var sumOuShu=0; //偶数位数组之和
40      var sumJiShuChild1=0; //奇数位*2 >9 的分割之后的数组个位数之和
41      var sumJiShuChild2=0; //奇数位*2 >9 的分割之后的数组十位数之和
42      var sumTotal=0;
43      for(var m=0;m<arrJiShu.length;m++){
44          sumJiShu=sumJiShu+parseInt(arrJiShu[m]);
45      }
46
47      for(var n=0;n<arrOuShu.length;n++){
48          sumOuShu=sumOuShu+parseInt(arrOuShu[n]);
49      }
50
51      for(var p=0;p<jishu_child1.length;p++){
52          sumJiShuChild1=sumJiShuChild1+parseInt(jishu_child1[p]);
53          sumJiShuChild2=sumJiShuChild2+parseInt(jishu_child2[p]);
54      }
55      //计算总和
56      sumTotal=parseInt(sumJiShu)+parseInt(sumOuShu)+parseInt(sumJiShuChild1)+parseInt(sumJiShuChild2);
57
58      //计算luhn值
59      var k= parseInt(sumTotal)%10==0?10:parseInt(sumTotal)%10;
60      var luhn= 10-k;
61
62      if(lastNum==luhn){
63         console.log("验证通过");
64          return true;
65      }else{
66         layer.msg("银行卡号必须符合luhn校验");
67          return false;
68      }
69  }
70
71  //检查银行卡号
72  function CheckBankNo(bankno) {
73      var bankno = bankno.replace(/\s/g,'');
74      if(bankno == "") {
75          layer.msg("请填写银行卡号");
76          return false;
77      }
78      if(bankno.length < 16 || bankno.length > 19) {
79          layer.msg("银行卡号长度必须在16到19之间");
80          return false;
81      }
82      var num = /^\d*$/;//全数字
83      if(!num.exec(bankno)) {
84          layer.msg("银行卡号必须全为数字");
85          return false;
86      }
87      //开头6位
88      var strBin = "10,18,30,35,37,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,58,60,62,65,68,69,84,87,88,94,95,98,99";
89      if(strBin.indexOf(bankno.substring(0, 2)) == -1) {
90          layer.msg("银行卡号开头6位不符合规范");
91          return false;
92      }
93      //Luhn校验
94      if(!luhnCheck(bankno)){
95          return false;
96      }
97      return true;
98  }

JS验证银行卡号有效性相关推荐

  1. js验证银行卡号,并自动识别银行信息。js验证手机码。js验证数字

    1. 需求 工作要求,要对表单的一些内容进行校验,要求 验证是否输入的数字 验证手机号是否正确 验证银行卡号,并自动识别银行名称 2. 实现 2.1 验证数字 export function vali ...

  2. node.js 验证路径有效性_怎样识别光伏谐波路径?试试这个算法

    国网吉林省电力有限公司四平供电公司的研究人员韩绍禹.李新辉,在2019年第5期<电气技术>杂志上撰文指出(论文标题为"基于信息熵和节点导纳矩阵的光伏谐波路径初探"),光 ...

  3. js验证银行卡号属于哪家银行

    因为今天有个业务涉及到了银行卡业务,一开始打算让用户自己输入银行卡类型,或者是让用户手动选择银卡卡类型,但是都感觉有点捞,于是还是采用了调用接口: //接口链接 https://ccdcapi.ali ...

  4. js身份证号有效性验证

    js身份证号有效性验证 1.简述 最近做的系统有用到实名验证的,起初对于用户身份证号只是简单地使用正则表达式进行验证, 很多无效的身份证号就成了漏网之鱼. 导致后台存表里很多无效的身份证号,随便输入用 ...

  5. JS 验证表单不能为空

    开发交流QQ群:  173683895   173683895   526474645  人满的请加其它群 JS 验证表单不能为空的简单demo,先看效果图 实现代码 <!--index.wxm ...

  6. JS验证框架的使用方法

    今天着重介绍的是JS验证框架在Java Web项目中的应用, JSValidation要去http://cosoft.org.cn/projects/jsvalidation中下载最新版本. JSVa ...

  7. 用JS验证asp.net服务端控件

    可以用javascript来验证asp.net服务端的控件,不过目前只局限于验证textbox(输入框)不能为空的情况.还有一个前提条件是,提交按钮必须是html的控件,再加上一个runat=serv ...

  8. js验证input输入框(字母,数字,符号,中文)

    <h1>js验证输入框内容</h1> <br /> <br />   只能输入英文 <input type="text" on ...

  9. JS验证图片格式和大小并预览

    用于上传图片的js验证: <%@ page language="java" contentType="text/html; charset=UTF-8"p ...

最新文章

  1. 2020年成为机器学习工程师,看这9本书就够了!
  2. redistemplate 设置永不过期_密码已过期 拒绝访问如何处理?
  3. 大数据领域可以应聘的岗位
  4. Kattis - icpccamp ICPC Camp(二分+贪心)
  5. 详解Session分布式共享(.NET CORE版)
  6. 计算机组装与维护配置清单作业,计算机组装与维护 作业汇.doc
  7. 发现很多人的基础都不好
  8. MySQL(26)--- 索引
  9. python文本分类算法_python编写朴素贝叶斯用于文本分类
  10. echart保存图片的两种实现方式
  11. 一文搞懂什么是禁忌搜索算法Tabu Search【附应用举例】
  12. 第六章 第九节 焦点与tab顺序
  13. 一个命令清理电脑垃圾,不用再安装任何管家软件,节省电脑资源,让电脑运行更快更流畅
  14. bootstrap 动态横向时间轴_jquery纵向时间轴插件_Bootstrap响应两侧时间轴特效代码Timeline...
  15. linux检查网络是否通畅_linux下怎么检测网络的连通性
  16. BGP(Border Gatreway Protcol)边界网关路由协议
  17. NFC NFC手机 兼容的标签 支持Mifare Classic 手机列表
  18. 【校园招聘】广州百田
  19. uni App+H5 实现人脸识别
  20. 软件测试|个人心得与资源分享 - 1

热门文章

  1. PHP——流程控制语句
  2. 【macOS自带VNC远程】——Windows在外远程桌面控制macOS
  3. Laravel 8 文件的上传/下载/显示的实例
  4. 什么是小瀑布陷阱? 敏捷与小瀑布的区别是什么?
  5. VIO回顾:从滤波和优化的视角
  6. 【理财实践】 开科唯识-互联网理财为什么会选TiDB
  7. 微观经济学知识点(四)
  8. MCU常见的操作系统介绍
  9. 像经营公司一样经营好自己的职业生涯,自此打破35岁焦虑!
  10. 解决WINDOWS无法打开“添加打印机”,本地后台打印程序服务没有运行