開(kāi)發(fā)中,有時(shí)候,為了打造更好的用戶(hù)體驗(yàn),同時(shí)減輕服務(wù)器端的壓力,需要對(duì)于一些如,手機(jī)號(hào)碼,銀行卡號(hào),身份證號(hào)碼進(jìn)行格式校驗(yàn)
下面是判斷銀行卡號(hào)輸入是否正確的代碼(基于Luhn算法的格式校驗(yàn)):
iOS代碼:
/**
* 銀行卡格式校驗(yàn)
*
* @param cardNo 銀行卡號(hào)
*
* @return
*/
+ (BOOL) checkCardNo:(NSString*) cardNo{
int oddsum = 0; //奇數(shù)求和
int evensum = 0; //偶數(shù)求和
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算法:可用于檢測(cè)銀行卡卡號(hào)
* @param cardNo
* @return
*/
public static boolean matchLuhn(String cardNo) {
int[] cardNoArr = new int[cardNo.length()];
for (int i=0; icardNo.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;icardNoArr.length;i++) {
sum += cardNoArr[i];
}
return sum % 10 == 0;
}
附(銀行卡號(hào)格式化):
在輸入銀行卡號(hào)過(guò)程中,通常,我們會(huì)每隔4位插入一個(gè)"-",類(lèi)似"1332-2131-2313-1231-212"這種的格式
可以通過(guò)以下方法實(shí)現(xiàn):
設(shè)置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;
}
最后,怎么獲得不包含符號(hào)"-"的銀行卡號(hào)呢?
[self.textField.text stringByReplacingOccurrencesOfString:@"-" withString:@""]
以上這篇判斷用戶(hù)輸入的銀行卡號(hào)是否正確的方法(基于Luhn算法的格式校驗(yàn))就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
您可能感興趣的文章:- iOS 中使用正則表達(dá)式判斷身份證格式及銀行卡號(hào)格式是否正確(推薦)
- PHP實(shí)現(xiàn)通過(guò)Luhn算法校驗(yàn)信用卡卡號(hào)是否有效
- Go語(yǔ)言通過(guò)Luhn算法驗(yàn)證信用卡卡號(hào)是否有效的方法