判斷銀行卡


1.判斷銀行卡號(hào)

檢驗(yàn)數(shù)字算法(Luhn Check Digit Algorithm),也叫做模數(shù)10公式,是一種簡(jiǎn)單的算法,用于驗(yàn)證銀行卡、信用卡號(hào)碼的有效性的算法。對(duì)所有大型信用卡公司發(fā)行的信用卡都起作用,

這些公司包括美國(guó)Express、護(hù)照、萬事達(dá)卡、Discover和用餐者俱樂部等。這種算法最初是在20世紀(jì)60年代由一組數(shù)學(xué)家制定,現(xiàn)在Luhn檢驗(yàn)數(shù)字算法屬于大眾,任何人都可以使用它。

算法:將每個(gè)奇數(shù)加倍和使它變?yōu)閱蝹€(gè)的數(shù)字,如果必要的話通過減去9和在每個(gè)偶數(shù)上加上這些值。如果此卡要有效,那么,結(jié)果必須是10的倍數(shù)。

// 判斷銀行卡

+ (BOOL) validateBankCardNumber: (NSString *)bankCardNumber

{

NSString *digitsOnly = bankCardNumber;

int sum = 0;

int digit = 0;

int addend = 0;

BOOL timesTwo = false;

for (NSInteger i = digitsOnly.length - 1; i >= 0; i--) {

digit = [digitsOnly characterAtIndex:i] - '0';

if (timesTwo) { addend = digit * 2; if (addend > 9) {

addend -= 9;

}

} else {

addend = digit;

}

sum += addend;

timesTwo = !timesTwo;

}

int modulus = sum % 10;

return modulus == 0;

return YES;

}

2.textfield銀行卡四位輸入

NSString *text = [self.cardText text];

NSCharacterSet *characterSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789\b"];

string = [string stringByReplacingOccurrencesOfString:@" " withString:@""];

if ([string rangeOfCharacterFromSet:[characterSet invertedSet]].location != NSNotFound) {

[self popViewText:@"請(qǐng)輸入數(shù)字" textField:_cardText];

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]];

// 限制長(zhǎng)度

if (newString.length >= 24) {

return NO;

}

[self.cardText setText:newString];

return NO;

}

return YES;

3.返回去掉空格的字符串

-(NSString *)bankNumToNormalNum

{

return [self.cardText.text stringByReplacingOccurrencesOfString:@" " withString:@""];

}

4.調(diào)用

_cardNumber = [self bankNumToNormalNum];

BOOL isCard = [CheckMessage validateBankCardNumber:_cardNumber];

if (isCard) {

NSLog(@"1");

NSLog(@"%@, %@", _cardText.text, _cardNumber);

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容