判断用户输入的银行卡号是否正确--基于Luhn算法的格式校验
来源:互联网 发布:淘宝店怎么提升销量 编辑:程序博客网 时间:2024/05/01 09:37
开发中,有时候,为了打造更好的用户体验,同时减轻服务器端的压力,需要对于一些如,手机号码,银行卡号,身份证号码进行格式校验
下面是判断银行卡号输入是否正确的代码(基于Luhn算法的格式校验):
iOS代码:
/**
* 银行卡格式校验
*
* @param cardNo 银行卡号
*
* @return
*/
+ (BOOL) checkCardNo:(NSString*) cardNo{
int oddsum = 0; //奇数求和
int evensum = 0; //偶数求和
int allsum = 0;
int cardNoLength = (int)[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;
}
Androd代码:
/**
* 匹配Luhn算法:可用于检测银行卡卡号
* @param cardNo
* @return
*/
public static boolean matchLuhn(String cardNo) {
int[] cardNoArr = new int[cardNo.length()];
for (int i=0; i<cardNo.length(); i++) {
cardNoArr[i] = Integer.valueOf(String.valueOf(cardNo.charAt(i)));
}
for(int i=cardNoArr.length-2;i>=0;i-=2) {
cardNoArr[i] <<= 1;
cardNoArr[i] = cardNoArr[i]/10 + cardNoArr[i]%10;
}
int sum = 0;
for(int i=0;i<cardNoArr.length;i++) {
sum += cardNoArr[i];
}
return sum % 10 == 0;
}
附(银行卡号格式化):
在输入银行卡号过程中,通常,我们会每隔4位插入一个"-",类似"1332-2131-2313-1231-212"这种的格式
可以通过以下方法实现:
设置textField的代理
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSString *text = [textField text];
NSCharacterSet *characterSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789\b"];
string = [string stringByReplacingOccurrencesOfString:@"-" withString:@""];
if ([string rangeOfCharacterFromSet:[characterSet invertedSet]].location != NSNotFound) {
return NO;
}
text = [text stringByReplacingCharactersInRange:range withString:string];
text = [text stringByReplacingOccurrencesOfString:@"-" withString:@""];
NSString *newString = @"";
while (text.length > 0) {
NSString *subString = [text substringToIndex:MIN(text.length, 4)];
newString = [newString stringByAppendingString:subString];
if (subString.length == 4) {
newString = [newString stringByAppendingString:@"-"];
}
text = [text substringFromIndex:MIN(text.length, 4)];
}
newString = [newString stringByTrimmingCharactersInSet:[characterSet invertedSet]];
if (newString.length >= 24) {
return NO;
}
[textField setText:newString];
return NO;
}
最后,怎么获得不包含符号"-"的银行卡号呢?
[self.textField.text stringByReplacingOccurrencesOfString:@"-" withString:@""]
- 判断用户输入的银行卡号是否正确--基于Luhn算法的格式校验
- Java之——基于Luhn算法的银行卡卡号的格式校验
- Android luhn算法 银行卡号校验
- JavaScript 判断用户输入的格式是否正确
- 如何判断用户输入的邮箱格式是否正确?
- 银行卡号校验位的LUHN算法模10“隔位2倍加”校验数的公式
- javascript实现银行卡号的Luhn验证或校验算法-简单易懂
- 使用javascript实现银行卡号的Luhn校验或验证算法
- 银行卡校验规则(Luhn算法)
- 银行卡校验规则(Luhn算法)
- 银行卡校验规则(Luhn算法)
- 银行卡校验规则(Luhn算法)
- 银行卡校验规则(Luhn算法)
- 银行卡校验规则(Luhn算法)
- 银行卡校验规则(Luhn算法)
- 判断输入的IP格式是否正确
- 校验银行卡号是否正确
- android 用户注册或登录时判断输入的是否是正确格式的电话号码
- 分区表更改默认表空间及移动现有分区到指定表空间
- 前端跨域的几种方式
- Git与TortoiseGit基本操作
- swap函数的泛型
- android 解决部分手机连接热点wifi导致被切换,enablenetwork(netID, true)无效的问题
- 判断用户输入的银行卡号是否正确--基于Luhn算法的格式校验
- UDP接收实例
- Android前端判断敏感词汇
- java.util.concurrent之ForkJoin
- Windows下查询域名的DNS TXT记录的命令
- poj_2065 SETI(高斯消元解同余方程组)
- hashmapper的使用以及json字符串与普通字符串的差异
- Linux下使用shell解压打包jar包
- 【算法模板】图论