银行卡合法性校验
来源:互联网 发布:linux 禅道 怎么启动 编辑:程序博客网 时间:2024/05/12 15:46
Luhn检验数字算法(Luhn Check Digit Algorithm),也叫做模数10公式,是一种简单的算法,用于验证银行卡、信用卡号码的有效性的算法。对所有大型信用卡公司发行的信用卡都起作用,这些公司包括美国Express、护照、万事达卡、Discover和用餐者俱乐部等。这种算法最初是在20世纪60年代由一组数学家制定,现在Luhn检验数字算法属于大众,任何人都可以使用它。
算法:将每个奇数加倍和使它变为单个的数字,如果必要的话通过减去9和在每个偶数上加上这些值。如果此卡要有效,那么,结果必须是10的倍数。
使用如下代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
//剔除卡号里的非法字符
-(NSString *)getDigitsOnly:(NSString*)s
{
NSString *digitsOnly = @"";
char c;
for (int i = 0; i < s.length; i++)
{
c = [s characterAtIndex:i];
if (isdigit(c))
{
digitsOnly =[digitsOnly stringByAppendingFormat:@"%c",c];
}
}
return digitsOnly;
}
//检查银行卡是否合法
//Luhn算法
-(BOOL)isValidCardNumber:(NSString *)cardNumber
{
NSString *digitsOnly = [self getDigitsOnly:cardNumber];
int sum = 0;
int digit = 0;
int addend = 0;
BOOL timesTwo = false;
for (int i = digitsOnly.length - 1; i >= 0; i--)
{
digit = [digitsOnly characterAtIndex:i] - '0';
if (timesTwo)
{
addend = digit * 2;
if (addend > 9) {
addend -= 9;
}
}
else {
addend = digit;
}
sum += addend;
timesTwo = !timesTwo;
}
int modulus = sum % 10;
return modulus == 0;
}
算法:将每个奇数加倍和使它变为单个的数字,如果必要的话通过减去9和在每个偶数上加上这些值。如果此卡要有效,那么,结果必须是10的倍数。
使用如下代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
//剔除卡号里的非法字符
-(NSString *)getDigitsOnly:(NSString*)s
{
NSString *digitsOnly = @"";
char c;
for (int i = 0; i < s.length; i++)
{
c = [s characterAtIndex:i];
if (isdigit(c))
{
digitsOnly =[digitsOnly stringByAppendingFormat:@"%c",c];
}
}
return digitsOnly;
}
//检查银行卡是否合法
//Luhn算法
-(BOOL)isValidCardNumber:(NSString *)cardNumber
{
NSString *digitsOnly = [self getDigitsOnly:cardNumber];
int sum = 0;
int digit = 0;
int addend = 0;
BOOL timesTwo = false;
for (int i = digitsOnly.length - 1; i >= 0; i--)
{
digit = [digitsOnly characterAtIndex:i] - '0';
if (timesTwo)
{
addend = digit * 2;
if (addend > 9) {
addend -= 9;
}
}
else {
addend = digit;
}
sum += addend;
timesTwo = !timesTwo;
}
int modulus = sum % 10;
return modulus == 0;
}
再一次感谢您花费时间阅读这篇文章!
微博: @Danny_吕昌辉
博客: SuperDanny
0 1
- IOS银行卡合法性校验
- 银行卡合法性校验
- Java使用luhn校验算法实现银行卡号合法性校验&&获取银行卡号所属银行
- Java实现Luhm算法--银行卡号合法性校验
- 校验银行卡
- 银行卡号合法性验证小结
- iOS 银行卡号合法性判断
- 校验email的合法性
- 图片文件合法性校验
- java:日期合法性校验
- js校验身份证号码合法性
- 密码合法性校验
- 校验组织机构代码 合法性
- java身份证合法性校验
- SQLSERVER校验身份证号 合法性
- 身份证号码的合法性校验
- IP合法性校验
- 校验xml的合法性
- 访问数据库
- [C#脚本]-荒岛逃生游戏制作
- awk NF
- windows下的 c++ socket编程
- javascript var和typeof用法理解
- 银行卡合法性校验
- 部署shop++,启动eclipse遇到内存溢出。
- objective-c 获取UIview 界面宽度语句
- iOS 对象转换成字典
- 子类与父类之间的方法重载、隐藏、重写与虚方法调用
- 1082. Read Number in Chinese (25)
- 一些不错技术博客列表 长期更新~~
- 播放音效 播放音乐
- 2016年LinuxMint将带来更多有趣更新