java實現銀行卡卡號 Luhm 校驗演算法
效驗是否為銀行卡,用於驗證
現行 16 位銀聯卡現行卡號開頭 6 位是 622126~622925 之間的,7 到 15 位是銀行自定義的,
可能是髮卡分行,髮卡網點,髮卡序號,第 16 位是校驗碼。
16 位卡號校驗位採用 Luhm 校驗方法計算:
1,將未帶校驗位的 15 位卡號從右依次編號 1 到 15,位於奇數位號上的數字乘以 2
2,將奇位乘積的個十位全部相加,再加上所有偶數位上的數字
3,將加法和加上校驗位能被 10 整除。
------------------------------------------
如果其中一位數字換掉的話,直接導致最後校驗位錯誤。
public class Test { public static void main(String[] args) { String card = "6227007200120897790"; System.out.println(" card: " + card); System.out.println("check code: " + getBankCardCheckCode(card)); System.out.println("是否為銀行卡:"+checkBankCard(card)); } /** * 校驗銀行卡卡號 * @param cardId * @return */ public static boolean checkBankCard(String cardId) { char bit = getBankCardCheckCode(cardId.substring(0, cardId.length() - 1)); if(bit == 'N'){ return false; } return cardId.charAt(cardId.length() - 1) == bit; } /** * 從不含校驗位的銀行卡卡號採用 Luhm 校驗演算法獲得校驗位 * @param nonCheckCodeCardId * @return */ public static char getBankCardCheckCode(String nonCheckCodeCardId){ if(nonCheckCodeCardId == null || nonCheckCodeCardId.trim().length() == 0 || !nonCheckCodeCardId.matches("\\d+")) { //如果傳的不是資料返回N return 'N'; } char[] chs = nonCheckCodeCardId.trim().toCharArray(); int luhmSum = 0; for(int i = chs.length - 1, j = 0; i >= 0; i--, j++) { int k = chs[i] - '0'; if(j % 2 == 0) { k *= 2; k = k / 10 + k % 10; } luhmSum += k; } return (luhmSum % 10 == 0) ? '0' : (char)((10 - luhmSum % 10) + '0'); } }
相關推薦
java實現銀行卡卡號 Luhm 校驗演算法
效驗是否為銀行卡,用於驗證 現行 16 位銀聯卡現行卡號開頭 6 位是 622126~622925 之間的,7 到 15 位是銀行自定義的,可能是髮卡分行,髮卡網點,髮卡序號,第 16 位是校驗碼。16 位卡號校驗位採用 Luhm 校驗方法計算:1,將未帶校驗位的 1
銀行卡號Luhm校驗Java實現程式碼
public class CheckBankNumber {// Description: 銀行卡號Luhm校驗// Luhm校驗規則:16位銀行卡號(19位通用):// 1.將未帶校驗位的 15(或18)位卡號從右依次編號 1 到 15(18),位於奇數位號上的數字乘以 2。// 2.將奇位乘積的個十位全
銀行卡號驗證js(銀行卡號Luhm校驗)
//銀行卡號校驗 //Description: 銀行卡號Luhm校驗 //Luhm校驗規則:16位銀行卡號(19位通用): // 1.將未帶校驗位的 15(或18)位卡號從右依次編號 1 到 15(18),位於奇數位號上的數字乘以 2。 // 2.將奇位乘積的個十位全部相加,再加上所有偶數位上的數字。 //
微信企業號回調模式配置解說 Java Servlet+Struts2版本號 echostr校驗失敗解決
del com crypt atp org use ase http err 微信企業號回調模式配置解說 Java Servlet+Struts2版本號
銀行卡Luhm校驗演算法
if (val.length >= 16) { var pattern = RegExp(/^[0-9]{16}$/); if (val.length == 19) { pattern = RegExp(/^[0-9]{19}$/);
銀行卡LUHM校驗演算法(C++)
演算法比較簡單。 1、除去校驗位後,從右至左,將卡號按位編碼,從0開始。 2、將偶數位×2,得到的結果按位相加,比如偶數為6,×2=12,則將1和2相加=3;奇數位則直接參與相加; 3、重複步驟2得到總和,該總和加上校驗位應能被10整除,否則校驗位不正確。 圖解: 設卡號
Java使用luhn校驗演算法實現銀行卡號合法性校驗&&獲取銀行卡號所屬銀行
Luhn校驗演算法或是Luhn 公式,也被稱作“模10演算法”。它是一種簡單的校驗公式,一般會被用於身份證號碼,IMEI號碼,美國供應商識別號碼, 或是加拿大的社會保險號碼的驗證。該演算法是由IBM的科學家Hans Peter Luhn所創造,於1954年1月6日提出該
Java之——基於Luhn演算法的銀行卡卡號的格式校驗
一、檢驗規則 Luhn演算法被用於最後一位為校驗碼的一串數字的校驗,通過如下規則計算校驗碼的正確性: 按照從右往左的順序,從這串數字的右邊開始,包含校驗碼,將偶數位數字乘以2,如果每次乘二操作的結果大於9(如 8 × 2 = 16),然後計算個位和十位數字的和(如
前端JS校驗銀行卡卡號和身份證號碼(附ES6版方法)
var Wi = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 ]; // 加權因子 var ValideCode = [ 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 ]; // 身份證驗證位值.10代表X funct
Js實現16/19位銀行卡號前端校驗
//luhn校驗規則:16位銀行卡號(19位通用): // 1.將未帶校驗位的 15(或18)位卡號從右依次編號 1 到 15(18),位於奇數位號上的數字乘以 2。 // 2.將奇位乘積的個十位全部相加,再加上所有偶數位上的數字。
java實現CRC16 MODBUS校驗演算法
最近做通訊開發,遇到了校驗碼的問題 我在這個網站上試了試 裡面有各種crc16的校驗碼 廢話不多說,直接上程式碼 /** * 計算CRC16校驗碼 * * @param bytes * @return
銀行卡號的校驗
銀行卡號的校驗 ,js 函式,針對普通的16位和19位銀行卡校驗有效,使用 Luhm 校驗方法。 function luhmCheck(cardNum){ cardNum = (cardNum+'').replace(/\s+/g,''); if(!(/^\d{16,19
Java實現身份證校驗演算法
public class ValidateNumberId { private static String[] validtable = {"1","0","X","9","8","7",
CRC查表法——表的由來及Java實現CRC8校驗演算法
你也可以檢視我的其他同類文章,也會讓你有一定的收貨! 大概思路 我先說一下查表法,表的計算方法,以CRC4為例: 生成多項式:B = 10011B 測試資料:A = 0011 1110B 1、查表法實際上是利用XOR的交換律和結合律:(A X
銀行卡卡號識別:C#版本和iOS版本
及其 emgucv ria topic ext 網址 整體 link 比較 (一)圖像采集 首先我們要取得待識別的圖像。這項工作可以通過數碼相機、DV機、工業攝像機、電腦數字攝像頭、手機攝像頭等設備采集,並從中取得我們要分析的圖像信息。 (二)版面分析
微信公眾號 Token校驗失敗 基於spring-boot
最開始是這麼寫: @GetMapping(produces = "text/plain;charset=utf-8") public String authGet( @RequestParam(name = "signature", required = false)
實現一次性驗證碼的校驗
建立一個servlet隨機生成認證碼圖片 //輸出隨機認證碼圖片 public class VerifyServlet extends HttpServlet { //圖片的寬度 public static final Integer WIDTH = 130;
[無心插柳]簡單實現常用的表單校驗函式
有意取而不得,失落而歸。無意間有所獲,未有喜悅,但珍惜依舊 1.前言 表單校驗,相信絕大部分的開發者會遇到過,網上也有很多外掛可使用。但當時想著就是簡單的校驗,沒必要引外掛,就自己寫一個簡單的函式。隨著校驗的需求多樣化,函式越來越大。有點輪子的雛形,算是無心插柳吧。現在也該分享出來了,和大家交流
模擬RSA雙向驗證,並且實現DES加密以及MD5校驗過程(python程式碼實現)
要求如下: (1)A,B兩端各生成公鑰金鑰對(PA,SA), 金鑰對(PB,SB)。 (2)A端生成隨機數N1,用B的公鑰PB加
利用Vue計算資料屬性實現簡單的表單校驗
計算資料屬性(官網稱呼),又叫動態資料繫結(相對於靜態資料繫結而言).可以在dom渲染之前修改資料.按照官網的解釋,計算資料屬性是為了簡化模板的運算邏輯.從而利於維護.把複雜的邏輯繫結在computed裡.當然,利用它也可以做很多事情.比如單選,全選的實現.今