判断用户输入的银行卡号是否正确的方法(基于Luhn算法的格式校验)
开发中,有时候,为了打造更好的用户体验,同时减轻服务器端的压力,需要对于一些如,手机号码,银行卡号,身份证号码进行格式校验
下面是判断银行卡号输入是否正确的代码(基于Luhn算法的格式校验):
iOS代码:
/**
*银行卡格式校验
*
*@paramcardNo银行卡号
*
*@return
*/
+(BOOL)checkCardNo:(NSString*)cardNo{
intoddsum=0;//奇数求和
intevensum=0;//偶数求和
intallsum=0;
intcardNoLength=(int)[cardNolength];
intlastNum=[[cardNosubstringFromIndex:cardNoLength-1]intValue];
cardNo=[cardNosubstringToIndex:cardNoLength-1];
for(inti=cardNoLength-1;i>=1;i--){
NSString*tmpString=[cardNosubstringWithRange:NSMakeRange(i-1,1)];
inttmpVal=[tmpStringintValue];
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)
returnYES;
else
returnNO;
}
Androd代码:
/**
*匹配Luhn算法:可用于检测银行卡卡号
*@paramcardNo
*@return
*/
publicstaticbooleanmatchLuhn(StringcardNo){
int[]cardNoArr=newint[cardNo.length()];
for(inti=0;i=0;i-=2){
cardNoArr[i]<<=1;
cardNoArr[i]=cardNoArr[i]/10+cardNoArr[i]%10;
}
intsum=0;
for(inti=0;i
附(银行卡号格式化):
在输入银行卡号过程中,通常,我们会每隔4位插入一个"-",类似"1332-2131-2313-1231-212"这种的格式
可以通过以下方法实现:
设置textField的代理
-(BOOL)textField:(UITextField*)textFieldshouldChangeCharactersInRange:(NSRange)rangereplacementString:(NSString*)string
{
NSString*text=[textFieldtext];
NSCharacterSet*characterSet=[NSCharacterSetcharacterSetWithCharactersInString:@"0123456789\b"];
string=[stringstringByReplacingOccurrencesOfString:@"-"withString:@""];
if([stringrangeOfCharacterFromSet:[characterSetinvertedSet]].location!=NSNotFound){
returnNO;
}
text=[textstringByReplacingCharactersInRange:rangewithString:string];
text=[textstringByReplacingOccurrencesOfString:@"-"withString:@""];
NSString*newString=@"";
while(text.length>0){
NSString*subString=[textsubstringToIndex:MIN(text.length,4)];
newString=[newStringstringByAppendingString:subString];
if(subString.length==4){
newString=[newStringstringByAppendingString:@"-"];
}
text=[textsubstringFromIndex:MIN(text.length,4)];
}
newString=[newStringstringByTrimmingCharactersInSet:[characterSetinvertedSet]];
if(newString.length>=24){
returnNO;
}
[textFieldsetText:newString];
returnNO;
}
最后,怎么获得不包含符号"-"的银行卡号呢?
[self.textField.textstringByReplacingOccurrencesOfString:@"-"withString:@""]
以上这篇判断用户输入的银行卡号是否正确的方法(基于Luhn算法的格式校验)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。