有的时候咱们须要基于现有的code进行改造,可是改造的一个前提多是对于code长度有必定的要求,好比咱们作分库分表,准备在code上作文章。 因为历史缘由不一样的渠道产生的code有几种不一样的表现形式,结果就是code长度不同。 因此咱们在改造以前须要将这些code统一为19位长度,空格位置用0代替。app
public static String getDbCode(String original, Long userId) { if (StringUtils.isBlank(original) || original.length() == FINAL_CODE_LENGTH) { return original; } //0.获取code StringBuffer dbCode = new StringBuffer(""); dbCode.append(VERSION); //1.校验code保证code必须19位 int len = original.length(); if (len > LEAF_CODE_LENGTH) { dbCode.append(original.substring(0, LEAF_CODE_LENGTH)); } else if (len < LEAF_CODE_LENGTH) { dbCode.append(original).append("0000000000000000000".substring(0, LEAF_CODE_LENGTH - len)); } else { dbCode.append(original); } //2.对userId值进行取模 long userDelevery = userId % TABLE_COUNT; //3.拼接最终code if (userDelevery < 10) { dbCode.append("00").append(userDelevery + ""); } else if (userDelevery < 100) { dbCode.append("0").append(userDelevery + ""); } else { dbCode.append(userDelevery + ""); } return dbCode.toString(); }
这样确保不一样渠道产生的code长度统一为19位了。code