判断用户输入的银行卡号是否正确的方法(基于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算法的格式校验)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。