1. 程式人生 > >銀行卡號Luhm校驗Java實現程式碼

銀行卡號Luhm校驗Java實現程式碼


public class CheckBankNumber {

// Description: 銀行卡號Luhm校驗
// Luhm校驗規則:16位銀行卡號(19位通用):
// 1.將未帶校驗位的 15(或18)位卡號從右依次編號 1 到 15(18),位於奇數位號上的數字乘以 2。
// 2.將奇位乘積的個十位全部相加,再加上所有偶數位上的數字。
// 3.將加法和加上校驗位能被 10 整除。

// 開頭6位
// private final static String strBin =
// "10,18,30,35,37,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,58,60,62,65,68,69,84,87,88,94,95,98,99";


private final static String SUCCESS = "true";


private final static String BAD_LENGTH = "銀行卡號長度必須在16到19之間";


private final static String NOT_NUMBER = "銀行卡必須全部為數字";


private final static String ILLEGAL_NUMBER = "銀行卡不符合規則";


public static String luhmCheck(String bankno) {
if (bankno.length() < 16 || bankno.length() > 19) {
return BAD_LENGTH;
}


Pattern pattern = Pattern.compile("[0-9]*");
Matcher match = pattern.matcher(bankno);
if (match.matches() == false) {
return NOT_NUMBER;
}
// if (strBin.indexOf(bankno.substring(0, 2)) == -1) {
// return "銀行卡號開頭6位不符合規範";
// }


int lastNum = Integer.parseInt(bankno.substring(bankno.length() - 1,
bankno.length()));// 取出最後一位(與luhm進行比較)


String first15Num = bankno.substring(0, bankno.length() - 1);// 前15或18位
// System.out.println(first15Num);
char[] newArr = new char[first15Num.length()]; // 倒敘裝入newArr
char[] tempArr = first15Num.toCharArray();
for (int i = 0; i < tempArr.length; i++) {
newArr[tempArr.length - 1 - i] = tempArr[i];
}


int[] arrSingleNum = new int[newArr.length]; // 奇數位*2的積 <9
int[] arrSingleNum2 = new int[newArr.length];// 奇數位*2的積 >9
int[] arrDoubleNum = new int[newArr.length]; // 偶數位陣列


for (int j = 0; j < newArr.length; j++) {
if ((j + 1) % 2 == 1) {// 奇數位
if ((int) (newArr[j] - 48) * 2 < 9)
arrSingleNum[j] = (int) (newArr[j] - 48) * 2;
else
arrSingleNum2[j] = (int) (newArr[j] - 48) * 2;
} else
// 偶數位
arrDoubleNum[j] = (int) (newArr[j] - 48);
}


int[] arrSingleNumChild = new int[newArr.length]; // 奇數位*2 >9
// 的分割之後的陣列個位數
int[] arrSingleNum2Child = new int[newArr.length];// 奇數位*2 >9
// 的分割之後的陣列十位數


for (int h = 0; h < arrSingleNum2.length; h++) {
arrSingleNumChild[h] = (arrSingleNum2[h]) % 10;
arrSingleNum2Child[h] = (arrSingleNum2[h]) / 10;
}


int sumSingleNum = 0; // 奇數位*2 < 9 的陣列之和
int sumDoubleNum = 0; // 偶數位陣列之和
int sumSingleNumChild = 0; // 奇數位*2 >9 的分割之後的陣列個位數之和
int sumSingleNum2Child = 0; // 奇數位*2 >9 的分割之後的陣列十位數之和
int sumTotal = 0;
for (int m = 0; m < arrSingleNum.length; m++) {
sumSingleNum = sumSingleNum + arrSingleNum[m];
}


for (int n = 0; n < arrDoubleNum.length; n++) {
sumDoubleNum = sumDoubleNum + arrDoubleNum[n];
}


for (int p = 0; p < arrSingleNumChild.length; p++) {
sumSingleNumChild = sumSingleNumChild + arrSingleNumChild[p];
sumSingleNum2Child = sumSingleNum2Child + arrSingleNum2Child[p];
}


sumTotal = sumSingleNum + sumDoubleNum + sumSingleNumChild
+ sumSingleNum2Child;


// 計算Luhm值
int k = sumTotal % 10 == 0 ? 10 : sumTotal % 10;
int luhm = 10 - k;


if (lastNum == luhm) {
return SUCCESS;// 驗證通過
} else {
return ILLEGAL_NUMBER;
}
}


public static void main(String[] args) {
String bankno = "6214857110432079";
System.out.println(bankno + ":" + luhmCheck(bankno));
String bankno1 = "6212164000046323291";
System.out.println(bankno1 + ":" + luhmCheck(bankno1));
String bankno2 = "6222023104004123546";
System.out.println(bankno2 + ":" + luhmCheck(bankno2));
}

相關推薦

銀行卡LuhmJava實現程式碼

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實現銀行卡 Luhm 演算法

效驗是否為銀行卡,用於驗證 現行 16 位銀聯卡現行卡號開頭 6 位是 622126~622925 之間的,7 到 15 位是銀行自定義的,可能是髮卡分行,髮卡網點,髮卡序號,第 16 位是校驗碼。16 位卡號校驗位採用 Luhm 校驗方法計算:1,將未帶校驗位的 1

Java使用luhn演算法實現銀行卡合法性&&獲取銀行卡所屬銀行

Luhn校驗演算法或是Luhn 公式,也被稱作“模10演算法”。它是一種簡單的校驗公式,一般會被用於身份證號碼,IMEI號碼,美國供應商識別號碼, 或是加拿大的社會保險號碼的驗證。該演算法是由IBM的科學家Hans Peter Luhn所創造,於1954年1月6日提出該

Js實現16/19位銀行卡前端

//luhn校驗規則:16位銀行卡號(19位通用): // 1.將未帶校驗位的 15(或18)位卡號從右依次編號 1 到 15(18),位於奇數位號上的數字乘以 2。 // 2.將奇位乘積的個十位全部相加,再加上所有偶數位上的數字。

銀行卡

銀行卡號的校驗 ,js 函式,針對普通的16位和19位銀行卡校驗有效,使用 Luhm 校驗方法。 function luhmCheck(cardNum){ cardNum = (cardNum+'').replace(/\s+/g,''); if(!(/^\d{16,19

CRC8 java實現

以下為CRC8的實現 package server; /** * CRC8相關計算 * encode: utf-8 * * @author trb * @date 2013-11-21 */ public class CRC8

微信企業回調模式配置解說 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整除,否則校驗位不正確。 圖解: 設卡號

springmvc(四) springmvc的數據實現

jar ring 錯誤 登錄 分享 文件 框架 creat 對象       so easy~               --WH 一、什麽是數據校驗?       這個比較好理解,就是用來驗證客戶輸入的數據是否合法,比如客戶登錄時,用戶名不能為空,或者不能超出指定長度等

小程序數據簽名-Java

[] jdk 代碼 secret key vid encrypt 校驗 color JDK內置的簽名算法不包含小程序需要的(對稱解密使用的算法為 AES-128-CBC,數據采用PKCS#7填充),所以需要引用第三方jar。 compile group: ‘org

簡單的前端框架實現

占位符 orm tor urn message class tle 添加 != 前端表單在提交前總是要進行校驗的,而這些工作是繁瑣的,所以這兒寫了一個簡單的校驗框架,代碼實現如下: function Validate(id){ if(arguments.leng

微信公眾 Token失敗 基於spring-boot

最開始是這麼寫: @GetMapping(produces = "text/plain;charset=utf-8") public String authGet( @RequestParam(name = "signature", required = false)

深度優先與廣度優先Java實現程式碼示例【轉】

在程式設計生活中,我們總會遇見樹性結構 而當我們需要遍歷所有節點的時候有兩種遍歷演算法,1.深度優先,2.廣度優先 1.深度優先(DFS) 英文縮寫為DFS即Depth First Search.其過程簡要來說是對每一個可能的分支路徑深入到不能再深入為止,而且每個節點只能訪問一

二叉樹基礎操作 ,前中後序遍歷,求二叉樹高度,二叉搜尋樹(二叉排序樹)Java實現 程式碼集合

首先,定義一個樹類Tree.java public class Tree { public TreeNode root; } 定義樹節點類TreeNode.java public class TreeNode { public TreeNode(int

Java實現程式碼-比較器

如下程式碼:import java.util.*; class company implements Comparable { private String name; private String technology; private double marketV

MB中訊息集功能實現例子

下載文件到電腦,查詢使用更方便 1下載券  36人已下載 下載 還剩7頁未讀,繼續閱讀 定製HR最喜歡的簡歷 我要定製簡歷 雙擊“ MappingtoQ42 ” : 5. 釋出訊息流 打包

資料結構系列——字尾樹(附Java實現程式碼

字尾樹,說的通俗點就是將一個字串所有的字尾按照字首樹(Trie樹,可參考此篇文章)的形式組織成一棵樹。 什麼是字尾樹 舉例:“banana\0”,其中 “\0” 作為文字結束符號,該字串所有的字尾如下: banana\0 anana\0 na

C++ 獲取PE檔案自值的程式碼

將寫程式碼過程比較重要的一些程式碼收藏起來,下邊資料是關於C++ 獲取PE檔案自校驗值的程式碼。 #include#include <imagehlp.h>#pragma comment(lib,"imagehlp") { char szFileName[] = "d:\newupdate.ex