判斷使用者輸入的銀行卡號是否正確的方法(基於Luhn演算法的格式校驗)
開發中,有時候,為了打造更好的使用者體驗,同時減輕伺服器端的壓力,需要對於一些如,手機號碼,銀行卡號,身份證號碼進行格式校驗
下面是判斷銀行卡號輸入是否正確的程式碼(基於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演算法的格式校驗)就是小編分享給大家的全部內容了,希望能給大家一個參考。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70015105/viewspace-2870880/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- iOS 中使用正規表示式判斷身份證格式及銀行卡號格式是否正確(推薦)iOS
- JS驗證銀行卡號的正確性JS
- JS使用正則控制使用者輸入銀行卡號及格式化JS
- js判斷時間格式是否正確程式碼JS
- PHP中關於銀行卡號通用校驗演算法總結PHP演算法
- python 判斷輸入的是不是合法(正確)的ipPython
- TextField 輸入身份證號手機號銀行卡號格式化解決方案
- PHP判斷電子郵件是否正確的簡單方法介紹PHP
- java判斷輸入的字串是否為數字Java字串
- iOS-銀行卡輸入\輸出格式化顯示iOS
- 演算法題:如何判斷計算的 π 值是否精確?演算法
- MyBatis SQL xml處理小於號與大於號正確的格式MyBatisSQLXML
- 判斷SD卡是否可用SD卡
- 判斷某過程是否在執行的方法
- 判斷輸入的身份證號碼中是否有除數字和'X'/'x'的函式函式
- 登入判斷使用者名稱和密碼是否正確的程式碼(連結和讀取資料庫)密碼資料庫
- 演算法題———————輸入棧的入棧順序和出棧順序判斷是否合理演算法
- vue輸入的時候全是空格校驗方法Vue
- 演算法題:判斷括號字串是否有效演算法字串
- C#驗證輸入的是否數字的方法C#
- 利用ORACLE正規表示式判斷字串是否為日期格式Oracle字串
- 點選tabbarItem的時候判斷使用者是否處於登入狀態tabBar
- iOS 使用正則判斷輸入型別iOS型別
- postgresql判斷是否為數字的方法SQL
- 判斷物件是否相等的方法,==與 isEqual物件
- Javascript中判斷陣列的正確姿勢JavaScript陣列
- MyBatis SQL資料庫xml處理小於號與大於號正確的格式MyBatisSQL資料庫XML
- EditText監聽方法,實時的判斷輸入多少字元字元
- 判斷Linux系統是否被黑的方法Linux
- 判斷是否是陣列的幾種方法陣列
- JS判斷物件是否為空物件的方法JS物件
- 用scanf_s判斷輸入資料是否合法
- 請寫一個函式驗證電子郵件的格式是否正確(要求使用正則)函式
- 基於jquery+html開發的json格式校驗工具jQueryHTMLJSON
- php網站判斷使用者是否是手機訪問的方法PHP網站
- 利用棧和隊來判斷輸入的一個字串是否為迴文字串
- 驗證使用者輸入的字串是否為日期時間字串
- javascript 判斷括號是否配對。JavaScript