LUHN 模10 算法 银行卡校验
信用卡Luhn算法(模10)具体的校验过程如下:
1、从卡号最后一位数字开始,逆向将奇数位(1、3、5等等)相加。
2、从卡号最后一位数字开始,逆向将偶数位数字,先乘以2(如果乘积为两位数,则将其减去9),再求和。
3、将奇数位总和加上偶数位总和,结果应该可以被10整除。
例如,卡号是:5432123456788881
则奇数、偶数位分布:5432123456788881
奇数位和=35
偶数位乘以2(有些要减去9)的结果:1 6 2 6 1 5 7 7,求和=35。
最后35+35=70 可以被10整除,认定校验通过。
java代码
	public static boolean luhnValidate(String cardNo) {
		if(null == cardNo || cardNo.length() == 0) {
			return true;
		}
		if(null == cardNo || cardNo.matches("[0-9]*")) {
			return false;
		}
		int result = 0;
		int digit = 0;
		int counter = 0;
		for(int i = cardNo.length()-2; i >= 0; i--) {
			digit = Character.digit(cardNo.charAt(i), 10);
			if((counter % 2) == 0) {
				digit *= 2;
				result += (digit/10 + digit%10);
			} else {
				result += digit;
			}
			counter++;
		}
		return (10 - result%10) == Character.digit(cardNo.charAt(cardNo.length()-1), 10);
	}
LUHN 模10 算法 银行卡校验的更多相关文章
- 银行卡号码校验算法(Luhn算法,又叫模10算法)
		有时候在网上办理一些业务时有些需要填写银行卡号码,当胡乱填写时会立即报错,但是并没有发现向后端发送请求,那么这个效果是怎么实现的呢. 对于银行卡号有一个校验算法,叫做Luhn算法. 一.银行卡号码的校 ... 
- [技术栈]C#利用Luhn算法(模10算法)对IMEI校验
		1.Luhn算法(模10算法) 通过查看ISO/IEC 7812-1:2017文件可以看到对于luhn算法的解释,如下图: 算法主要分为三步: 第一步:从右边第一位(最低位)开始隔位乘2: 第二步:把 ... 
- RSA算法的C++string实现(模幂算法和欧几里得算法的使用)后附思路
		void resetNumA(string numAStr); //使用string重置numB void resetNumB(string numBStr); //将数组转换为字符串,用于输出 st ... 
- 数模常用算法系列Matlab实现-----线性规划
		线性规划的 Matlab 标准形式 线性规划的目标函数可以是求最大值,也可以是求最小值,约束条件的不等号可以是小于号也可以是大于号.为了避免这种形式多样性带来的不便,Matlab 中规定线性 规划的标 ... 
- RSA简介(二)——模幂算法
		RSA最终加密.解密都要用到模乘的幂运算,简称模幂运算. 回忆一下RSA,从明文A到B B=Ae1%N 对B解密,就是 A=Be2%N 其中,一般来说,加密公钥中的e1一般会比较小,取65537居多, ... 
- php银行卡校验
		前言银行金卡,维萨和万事达.银联品牌,如果是贷记卡或准贷记卡,一定为16位卡号.而借记卡可以16-19位不等.美国运通卡则不论金卡或是白金卡.普通卡,都是15位卡号.16-19 位卡号校验位采用 Lu ... 
- NetworkX系列教程(10)-算法之五:广度优先与深度优先
		小书匠Graph图论 重头戏部分来了,写到这里我感觉得仔细认真点了,可能在NetworkX中,实现某些算法就一句话的事,但是这个算法是做什么的,用在什么地方,原理是怎么样的,不清除,所以,我决定先把图 ... 
- NetworkX系列教程(10)-算法之四:拓扑排序与最大流问题
		小书匠Graph图论 重头戏部分来了,写到这里我感觉得仔细认真点了,可能在NetworkX中,实现某些算法就一句话的事,但是这个算法是做什么的,用在什么地方,原理是怎么样的,不清除,所以,我决定先把图 ... 
- NetworkX系列教程(10)-算法之三:关键路径问题
		小书匠Graph图论 重头戏部分来了,写到这里我感觉得仔细认真点了,可能在NetworkX中,实现某些算法就一句话的事,但是这个算法是做什么的,用在什么地方,原理是怎么样的,不清除,所以,我决定先把图 ... 
随机推荐
- VS Code Html Zen coding
			zen coding是一种编写html和css的方法, 很快捷. 打开Views/Home/About.cshtml, 然后在空白处输入div然后按Tab: 随后完整的div标签就出来了: zen c ... 
- 帝国cms调用相关文章若没有则调取最新文章
			前面我们说了帝国cms调用最新文章 利用文字调用标签phomenews,现在我们说下相关文章的调用,如果文章有设置关键词的话可以直接用[!--other.link--]进行调取,现在我们来升级一下,如 ... 
- 并发编程---死锁||递归锁---信号量---Event事件---定时器
			死锁 互斥锁:Lock(),互斥锁只能acquire一次 递归锁: RLock(),可以连续acquire多次,每acquire一次计数器+1,只有计数为0时,才能被抢到acquire # 死锁 f ... 
- [geos]Geometry基本的几何对象
			读取shp中的点,读取shp中的线, (1)读取shp中的多边形,修改属性字段的值. 类库版本:geos3.6.2,shapelib1.3 定义类变量: GeometryFactory::unique ... 
- Linux学习笔记:常用100条命令(三)
			linux常用命令 1.查看当前yum源 yum list 2.查看电脑以及操作系统的相关信息 uname -a 3.查看当前版本信息 cat /proc/version 4.查看发行版本信息 cat ... 
- Kotlin provideDelegate
			提供委托 这又是一个蛋疼的叫法,其实,就是给A和委托B之间插入一个中间件而已 这个中件间的作用是用了对委托的参数做一个校验 好了,别的不多说,直接给demo import kotlin.reflect ... 
- vue中输入框聚焦,自动跳转下一个输入框
			比如 点击入库,el-dialog弹出来,然后自动聚焦第一个输入框,当输入框有值的时候,自动跳转下一个输入框 这个需求 直接上菜: this.$refs.lbj.focus()其实直接这么写也可以,但 ... 
- cocos2dx 3.x(打开网页webView)
			#include "ui/CocosGUI.h" using namespace cocos2d::experimental::ui; WebView *webView = Web ... 
- 网络编程之Socket详解
			在说socket之前.我们先了解下相关的网络知识: 端口 在Internet上有很多这样的主机,这些主机一般运行了多个服务软件,同时提供几种服务.每种服务都打开一个Socket,并绑定到一个端口上 ... 
- c#之字符串,列表,接口,队列,栈,多态
			1.字符串的用法 using System; using System.Collections.Generic; using System.Linq; using System.Text; using ... 
