判斷使用者輸入的銀行卡號是否正確的方法(基於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
- 如何判斷FMEA是否以正確的方式完成?
- PHP中關於銀行卡號通用校驗演算法總結PHP演算法
- PHP判斷電子郵件是否正確的簡單方法介紹PHP
- java判斷輸入的字串是否為數字Java字串
- 匹配銀行卡號的正規表示式
- MyBatis SQL xml處理小於號與大於號正確的格式MyBatisSQLXML
- 演算法題———————輸入棧的入棧順序和出棧順序判斷是否合理演算法
- 演算法題:判斷括號字串是否有效演算法字串
- 接收使用者輸入的數字,判斷該數字是否為四葉玫瑰數
- 判斷Linux系統是否被黑的方法Linux
- postgresql判斷是否為數字的方法SQL
- vue輸入的時候全是空格校驗方法Vue
- 判斷使用者輸入分數
- WPF --- TextBox的輸入校驗
- 使用Json.NET驗證json字串是否格式正確JSON字串
- iOS 使用正則判斷輸入型別iOS型別
- MyBatis SQL資料庫xml處理小於號與大於號正確的格式MyBatisSQL資料庫XML
- 判斷是否是陣列的幾種方法陣列
- JS判斷物件是否為空物件的方法JS物件
- 基於jquery+html開發的json格式校驗工具jQueryHTMLJSON
- 用scanf_s判斷輸入資料是否合法
- 請寫一個函式驗證電子郵件的格式是否正確(要求使用正則)函式
- python if判斷的使用格式Python
- 利用棧和隊來判斷輸入的一個字串是否為迴文字串
- 判斷是否為陣列的 JavaScript 方法總結陣列JavaScript
- PHP判斷檔案是否為圖片的方法PHP
- 東蘭判斷男女最準確的方法┅選擇去香港驗血的理由
- C#判斷字串是否為日期格式C#字串
- javascript 判斷括號是否配對。JavaScript
- 【js基礎】判斷是否是合法郵箱地址(正規表示式的應用)JS
- QQ郵箱正確輸入方式怎麼寫的 qq郵箱地址格式是qq號和什麼
- jQuery 判斷使用者是否存在jQuery
- js判斷輸入字串是否為空、空格、null總結JS字串Null
- 如何判斷網校原始碼是否值得使用?原始碼
- 基於機率判斷矩陣A*B是否等於C矩陣