iOS/Android银行卡号格式校验:Luhn算法实战
87 浏览量
更新于2024-09-02
收藏 47KB PDF 举报
在软件开发中,特别是在处理用户输入时,对银行卡号、手机号码等敏感数据进行格式校验是至关重要的。本文主要讲解的是如何使用Luhn算法来验证银行卡号的有效性。Luhn算法,也被称为Mod 10校验或信用卡校验,是一种广泛应用于信用卡和借记卡号的简单校验规则,用于检查数字序列是否符合该类型的卡片格式。
在iOS和Android平台中,都有相应的实现方法来完成这项任务。首先,来看一下iOS的实现:
```swift
+ (BOOL) checkCardNo:(NSString *)cardNo {
int oddSum = 0; // 奇数位求和
int evenSum = 0; // 偶数位求和
int allSum = 0;
int cardNoLength = [cardNo length];
int lastNum = [[cardNo substringFromIndex:cardNoLength - 1] intValue];
cardNo = [cardNo substringToIndex:cardNoLength - 1];
for (int i = cardNoLength - 1; i >= 1; i--) {
NSString *tmpString = [cardNo substringWithRange:NSMakeRange(i - 1, 1)];
int tmpVal = [tmpString intValue];
if (cardNoLength % 2 == 1) { // 如果是奇数位
if ((i % 2) == 0) { // 偶数次位置
tmpVal *= 2;
if (tmpVal >= 10) tmpVal -= 9;
evenSum += tmpVal;
} else {
oddSum += tmpVal;
}
} else { // 偶数位
if ((i % 2) == 1) {
tmpVal *= 2;
if (tmpVal >= 10) tmpVal -= 9;
evenSum += tmpVal;
} else {
oddSum += tmpVal;
}
}
}
allSum = oddSum + evenSum;
allSum += lastNum;
if ((allSum % 10) == 0) {
return YES; // 验证通过
} else {
return NO; // 验证失败
}
}
```
这段代码首先获取输入的银行卡号字符串,然后遍历每一位数字,根据奇偶性执行不同的计算规则:偶数位乘以2并可能减去9(如果结果大于等于10),奇数位则直接相加。最后,将所有奇数位和偶数位求和,并加上最后一位数字,如果这个总和能被10整除,则说明银行卡号符合Luhn算法,反之则不正确。
对于Android平台,代码类似但语法不同:
```java
public static boolean matchLuhn(String cardNo) {
int[] cardNoArr = new int[cardNo.length()];
for (int i = 0; i < cardNo.length(); i++) {
cardNoArr[i] = Integer.parseInt(cardNo.substring(i, i + 1));
}
// Luhn算法的具体步骤略同于iOS代码,这里省略了具体计算过程
if ((allSum % 10) == 0) {
return true; // 验证通过
} else {
return false; // 验证失败
}
}
```
总结来说,Luhn算法的银行卡号验证是通过逐位处理和加权求和的方式进行,对于奇数位和偶数位应用不同的计算规则,然后判断最终的校验和是否能被10整除。在实际开发中,这种方法可以帮助确保用户输入的银行卡号格式正确,减少无效请求对服务器的压力,提升用户体验。
2020-12-10 上传
2017-05-16 上传
2013-04-11 上传
2024-01-03 上传
2015-04-29 上传
2021-01-21 上传
103 浏览量
weixin_38745361
- 粉丝: 3
- 资源: 879
最新资源
- SSM动力电池数据管理系统源码及数据库详解
- R语言桑基图绘制与SCI图输入文件代码分析
- Linux下Sakagari Hurricane翻译工作:cpktools的使用教程
- prettybench: 让 Go 基准测试结果更易读
- Python官方文档查询库,提升开发效率与时间节约
- 基于Django的Python就业系统毕设源码
- 高并发下的SpringBoot与Nginx+Redis会话共享解决方案
- 构建问答游戏:Node.js与Express.js实战教程
- MATLAB在旅行商问题中的应用与优化方法研究
- OMAPL138 DSP平台UPP接口编程实践
- 杰克逊维尔非营利地基工程的VMS项目介绍
- 宠物猫企业网站模板PHP源码下载
- 52简易计算器源码解析与下载指南
- 探索Node.js v6.2.1 - 事件驱动的高性能Web服务器环境
- 找回WinSCP密码的神器:winscppasswd工具介绍
- xctools:解析Xcode命令行工具输出的Ruby库