/* * 生成指定位数随机码 * 范围 1-9 a-z */ package com.yiwei.common.utils; import java.util.Random; import java.util.UUID; import cn.hutool.core.util.RandomUtil; import org.springframework.stereotype.Service; public class CodeUtil { private static final int MIX_CAPITALIZATION = 50; private static final int BASE_HYBRID_PARAM = 92579527; private static final int MUTEX_HYBRID_PARAM = 952795; private static final int MINI_LENGTH = 1000000; private static final int DEFAULT_CHAR_NUM = 15; private static final int DEFAULT_POST_CHAR = '9'; public static void main(String[] args) { for (int i = 0; i < 100; i++) { // 通过传入ID的hashCode即可得到唯一的 随机n位字符串 String id = UUID.randomUUID().toString().replace("-", ""); System.out.println(CodeUtil.getRandom(id.hashCode(), true, true, false, 6)); } } /** * 获取随机验证码 * * @param charNum 位数 * @return */ public static String getCode(Integer charNum) { String id = UUID.randomUUID().toString().replace("-", ""); return CodeUtil.getRandom(id.hashCode(), true, true, false, 6); } /** * 生成随机字符串 * * @param hybrid 杂化参数 * @param needCap 大写杂化 * @param needLow 小写杂化 * @param ztO 0 to O 零转欧 * @param charNum 字符串位数限制,为0则为默认值,小于0则不设限制 * @return 字符串 */ public static String getRandom(long hybrid, boolean needCap, boolean needLow, boolean ztO, int charNum) { Random randomRan = new Random(System.currentTimeMillis() * System.currentTimeMillis()); long randomLong = randomRan.nextLong(); if (randomLong > hybrid * BASE_HYBRID_PARAM) { randomLong = randomLong - hybrid * MUTEX_HYBRID_PARAM; } else if (randomLong - hybrid < MINI_LENGTH) { randomLong = (randomLong - hybrid) * MUTEX_HYBRID_PARAM; } else { randomLong = randomLong - hybrid; } String randomStr = String.valueOf(Math.abs(randomLong)); StringBuilder random = new StringBuilder(); for (int count = 0; count < randomStr.length() - 1; ++count) { String subStr = randomStr.substring(count, count + 2); int subNum = Integer.parseInt(subStr); if (needCap && 'A' < subNum && 'Z' > subNum) { random.append((char) subNum); } else if (needLow && 'a' < subNum + MIX_CAPITALIZATION && 'z' > subNum + MIX_CAPITALIZATION) { random.append((char) (subNum + MIX_CAPITALIZATION)); } else { if (needCap && ztO && 0 == Integer.parseInt(randomStr.substring(count, count + 1))) { random.append('O'); } else { random.append(randomStr, count, count + 1); } } } random.append(randomStr, randomStr.length() - 1, randomStr.length()); return charNum(charNum, random); } /** * 字符串位数限制处理 */ private static String charNum(int charNum, StringBuilder random) { //check char num int activeCharNum; if (0 == charNum) { activeCharNum = DEFAULT_CHAR_NUM; } else if (charNum > 0) { activeCharNum = charNum; } else { return random.toString(); } //deal char num StringBuilder randomFormatted = new StringBuilder(); if (random.length() > activeCharNum) { randomFormatted.append(random.substring(0, activeCharNum)); } if (random.length() < activeCharNum) { int diff = activeCharNum - random.length(); randomFormatted.append(random); while (0 < diff--) { randomFormatted.append(DEFAULT_POST_CHAR); } } return randomFormatted.toString(); } }
生成指定位数随机码工具类
最新推荐文章于 2024-04-06 15:14:39 发布