生成32位訂單號
阿新 • • 發佈:2018-12-15
import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Random; /** * 訂單編碼碼生成器,生成32位數字編碼, * @生成規則 1位單號型別+17位時間戳+14位(使用者id加密&隨機數) * Date:2017年9月8日上午10:05:19 * @author */ public class OrderCodeFactory { /** 訂單類別頭 */ private static final String ORDER_CODE = "1"; /** 退貨類別頭 */ private static final String RETURN_ORDER = "2"; /** 退款類別頭 */ private static final String REFUND_ORDER = "3"; /** 未付款重新支付別頭 */ private static final String AGAIN_ORDER = "4"; /** 隨即編碼 */ private static final int[] r = new int[]{7, 9, 6, 2, 8 , 1, 3, 0, 5, 4}; /** 使用者id和隨機數總長度 */ private static final int maxLength = 14; /** * 根據id進行加密+加隨機陣列成固定長度編碼 */ private static String toCode(Long id) { String idStr =id.toString(); StringBuilder idsbs = new StringBuilder(); for(int i = idStr.length() - 1; i >= 0;i--) { idsbs.append(r[idStr.charAt(i)-'0']); } return idsbs.append(getRandom(maxLength - idStr.length())).toString(); } /** * 生成時間戳 */ private static String getDateTime() { DateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); return sdf.format(new Date()); } /** * 生成固定長度隨機碼 * @param n 長度 */ private static long getRandom(long n) { long min = 1,max = 9; for (int i = 1; i < n; i++) { min *= 10; max *= 10; } long rangeLong = (((long) (new Random().nextDouble() * (max - min)))) + min ; return rangeLong; } /** * 生成不帶類別標頭的編碼 * @param userId */ private static synchronized String getCode(Long userId) { userId = userId == null ? 10000 : userId; return getDateTime() + toCode(userId); } /** * 生成訂單單號編碼 * @param userId */ public static String getOrderCode(Long userId) { return ORDER_CODE + getCode(userId); } /** * 生成退貨單號編碼 * @param userId */ public static String getReturnCode(long userId) { return RETURN_ORDER + getCode(userId); } /** * 生成退款單號編碼 * @param userId */ public static String getRefundCode(long userId) { return REFUND_ORDER + getCode(userId); } /** * 未付款重新支付 * @param userId */ public static String getAgainCode(long userId) { return AGAIN_ORDER + getCode(userId); } public static void main(String[] args) { long userId = 13661719442L; String orderCode = getOrderCode(userId); System.out.println("orderCode="+orderCode+",length="+orderCode.length()); } }