iOS/Android银行卡号格式校验:Luhn算法实战
181 浏览量
更新于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 上传
2020-09-22 上传
103 浏览量
weixin_38745361
- 粉丝: 3
- 资源: 879
最新资源
- JHU荣誉单变量微积分课程教案介绍
- Naruto爱好者必备CLI测试应用
- Android应用显示Ignaz-Taschner-Gymnasium取消课程概览
- ASP学生信息档案管理系统毕业设计及完整源码
- Java商城源码解析:酒店管理系统快速开发指南
- 构建可解析文本框:.NET 3.5中实现文本解析与验证
- Java语言打造任天堂红白机模拟器—nes4j解析
- 基于Hadoop和Hive的网络流量分析工具介绍
- Unity实现帝国象棋:从游戏到复刻
- WordPress文档嵌入插件:无需浏览器插件即可上传和显示文档
- Android开源项目精选:优秀项目篇
- 黑色设计商务酷站模板 - 网站构建新选择
- Rollup插件去除JS文件横幅:横扫许可证头
- AngularDart中Hammock服务的使用与REST API集成
- 开源AVR编程器:高效、低成本的微控制器编程解决方案
- Anya Keller 图片组合的开发部署记录