判断用户输入的银行卡号是否正确的方法(基于Luhn算法的格式校验)
程序员文章站
2022-03-10 21:37:44
开发中,有时候,为了打造更好的用户体验,同时减轻服务器端的压力,需要对于一些如,手机号码,银行卡号,身份证号码进行格式校验
下面是判断银行卡号输入是否正确的代码(基于lu...
开发中,有时候,为了打造更好的用户体验,同时减轻服务器端的压力,需要对于一些如,手机号码,银行卡号,身份证号码进行格式校验
下面是判断银行卡号输入是否正确的代码(基于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算法的格式校验)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。