zoukankan      html  css  js  c++  java
  • 银行卡号码的校验规则

    前言

      我们公司业务判断身份证号和银行卡号是否符合时,居然直接调接口验证,甚至本地的开发环境没有做校验,测试环境却连接到新加坡总部的服务器验证,这一系列的骚操作是如此辣眼睛,ε=(´ο`*)))唉~

      于是好心帮公司把前端的校验写了,因为在前端如果格式就正确,此时再调用后台接口验证,可以一定概率的避免因客户手误输错卡号而进行的接口重复调用,从而尽可能的减少服务器的压力。

    银行卡号码的校验采用LUHN算法(模10算法),校验如下:
      1. 拿出卡号最后一位的校验位后,从右至左,将卡号按位编码,从0开始,判断偶数或奇数
      2. 判断逻辑--对每一位的计算规则:如果这一位是奇数位,则返回值本身,如果是偶数位,先将值乘以2得到一个数n,如果n是一位数(小于10),直接返回n,否则将n的个位数和十位数相加返回。
      3. 从右向左遍历,对每一位字符执行上面的判断逻辑,并将每一位的计算结果相加得到一个总数sum。
      4. 如果sum+校验位能够整除10,则此号码有效,否则号码无效。
    function verifyBankCard(num) {
      num = num.toString().split('');//变为字符串再转数组
      if(num.length > 19 || num.length < 15) return false;//银行卡号长度为15-19
      let lastNum = parseInt(num[num.length-1]);//取出最后一位--校验位
      num.length = num.length - 1;//删除最后一个值
      num = num.reverse();//变为数组再颠倒
    
      let sum = 0;//总数
      num.forEach((elem,i) => {
        elem = parseInt(elem);
        if(i % 2 === 0) {
          let n = elem * 2;
          if(n < 10) sum += n;
          else sum += (parseInt(n/10) + n%10);
        }
        else sum += elem;
      });
      return (sum+lastNum) % 10 === 0 ? true : false;
    }
    
    // let cardNumber = 6226094425653290;//true
    // let cardNumber = 6226097143099498;//true
    // let cardNumber = 6226097143099497;//false
    let cardNumber = 62260971430994971234;//false
    console.log("最终结果:",verifyBankCard(cardNumber));

    总结

      身份证校验规则https://www.cnblogs.com/zxd66666/p/13246137.html

  • 相关阅读:
    2014 年美国程序员薪资调查
    新加坡移民生活:想出都出不来了!
    mysql命令行参数
    甲骨文创始人埃里森的10大混蛋行为:曾翻微软垃圾堆
    为什么我要称自己为Javascript程序员
    原生JavaScript练习——弹出层
    Leetcode 344 Reverse String 字符串处理
    安装 Autoconf 2.69版
    Leetcode 28 Implement strStr()
    Leetcode 67 Add Binary 大数加法+字符串处理
  • 原文地址:https://www.cnblogs.com/zxd66666/p/13427095.html
Copyright © 2011-2022 走看看