java生成仿银行卡的会员号
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")); }} }
其实就是随机时间戳+随机数+业务代码
【java生成仿银行卡的会员号】转载于:https://www.cnblogs.com/wyf-love-dch/p/11379316.html
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 事件代理
- Java|Java OpenCV图像处理之SIFT角点检测详解
- java中如何实现重建二叉树
- 数组常用方法一
- 【Hadoop踩雷】Mac下安装Hadoop3以及Java版本问题
- Java|Java基础——数组
- RxJava|RxJava 在Android项目中的使用(一)
- 记录iOS生成分享图片的一些问题,根据UIView生成固定尺寸的分享图片
- java之static、static|java之static、static final、final的区别与应用