JAvaは銀行カードを模した会員番号を生成します
7141 ワード
package com.shopping.test;
import com.shopping.app.util.StringUtil;
/***
*
*/
public class BankNumberUtil{
private static int i = 0;
/**
* :6、8、9 。
* :6: 1, 8: 2, 9: 3 【 】
*
* @param prefix
* @return
*/
public synchronized static String getBrankNumber(String prefix) {
if (StringUtil.isNotBlank(prefix)) {
if ("689".indexOf(prefix) >= 0 && prefix.length() == 1) {
String st = "666" + prefix + getUnixTime();
return st + getBankCardCheckCode(st);
} else {
System.out.println(" ");
return null;
}
} else {
System.out.println(" ");
return null;
}
}
/***
*
*/
private synchronized static String getUnixTime(){
try {
Thread.sleep(10);// , 10
} catch (InterruptedException e) {
e.printStackTrace();
}
i++;i=i>100?i%10:i;
return ((System.currentTimeMillis()/100)+"").substring(1)+(i%10);
}
/**
*
* @param cardId
*/
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');
}
public static void main(String[] args) {
for (int i=0;i<100;i++){
System.out.println(getBrankNumber("8"));
System.out.println(getBrankNumber("6"));
System.out.println(getBrankNumber("9"));
}
}
}
ランダムタイムスタンプ+乱数+ビジネスコードです
転載先:https://www.cnblogs.com/wyf-love-dch/p/11379316.html