How to generate a random String in Java
我有一个对象叫
1 2 | studentId = getRandomId(); studentId ="1234567" <-- from the random generator. |
我要确保没有重复的身份证。
生成一个随机的字符串很容易——只需使用
1 2 3 4 5 6 7 8 9 |
现在,为了唯一性,您需要将生成的字符串存储在某个地方。如何做到这一点将真正取决于应用程序的其余部分。
这很好:
http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/randomstringutils.html
如果您想要唯一性(很有可能),请考虑使用MD5或SHA哈希。
还可以使用java.util包中的uuid类,该包返回32位字符串的随机uuid。
http://java.sun.com/j2se/1.5.0/docs/api/java/util/uuid.html
1 2 3 4 5 6 7 8 9 10 11 |
我想下面的课程代码会对你有所帮助。它支持多线程处理,但是您可以做一些改进,比如删除同步块和同步到getRandom()方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | public class RandomNumberGenerator { private static final Set<String> generatedNumbers = new HashSet<String>(); public RandomNumberGenerator() { } public static void main(String[] args) { final int maxLength = 7; final int maxTry = 10; for (int i = 0; i < 10; i++) { System.out.println(i +". studentId=" + RandomNumberGenerator.getRandomId(maxLength, maxTry)); } } public static String getRandomId(final int maxLength, final int maxTry) { final Random random = new Random(System.nanoTime()); final int max = (int) Math.pow(10, maxLength); final int maxMin = (int) Math.pow(10, maxLength-1); int i = 0; boolean unique = false; int randomId = -1; while (i < maxTry) { randomId = random.nextInt(max - maxMin - 1) + maxMin; synchronized (generatedNumbers) { if (generatedNumbers.contains(randomId) == false) { unique = true; break; } } i++; } if (unique == false) { throw new RuntimeException("Cannot generate unique id!"); } synchronized (generatedNumbers) { generatedNumbers.add(String.valueOf(randomId)); } return String.valueOf(randomId); } } |
很多可能性…
你知道如何随机生成一个整数吗?因此,您可以从中生成一个字符…(EX 65~A)
这取决于你需要什么,随机性的程度,涉及的安全性…但是对于一个学校项目,我想得到UUID子字符串是合适的:)
你需要问的第一个问题是你是否真的需要ID是随机的。有时,顺序ID就足够了。
现在,如果您确实需要它是随机的,我们首先注意一个生成的不包含重复项的数字序列不能称为随机的。:p既然我们已经排除了这一点,那么最快的方法就是让一个
希望这有帮助。