Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.135.62.42] |
|
Сообщ.
#1
,
|
|
|
Подскажите, пожалуйста.
Генератор случайных чисел построить легко - на основании текущего времени в мс. Хотелось бы appha-numeric формат просто.. И тогда что же, пистать самому (допустим, генерировать из диапазона латинских букв и вставлять char в сгенерированную строку от числа времени)или есть уже готовые решения? -Added Вот написал программку. Она генерит случайное число по времени в мс, потом вставляет на случайные позиции латинские заглавные буквы A-Z public class Generator { Random randomTimems=new Random(new Date().getTime()); Random randomCharandPos=new Random(); private String generateRandom() { return Integer.toString(Math.abs(randomTimems.nextInt())); } private char generateChar(){ int charNumber=Math.abs(randomCharandPos.nextInt(23))+67; return (char)charNumber; } private int generatePosition(String timems){ return Math.abs(randomCharandPos.nextInt(timems.length())); } public String getCode(){ String timems=generateRandom(); for(int i=0;i<4;i++){ int pos=generatePosition(timems); timems=timems.substring(0,pos)+generateChar()+timems.substring(pos+1); } return timems; } public static void main(String args[]){ Generator generator=new Generator(); for(int i=0;i<10;i++){ System.out.println(generator.getCode()); } } } |
Сообщ.
#2
,
|
|
|
Можно было бы поступить проще -
Цитата Большой Синий Кит @ Генератор случайных чисел построить легко - на основании текущего времени в мс. Есть java.util.Random. Цитата Большой Синий Кит @ Вот написал программку. А вот мой вариант: public class EnhancedRandom extends Random { private static final char[] SYMBOLS = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' }; public EnhancedRandom() { super(); } public EnhancedRandom(long seed) { super(seed); } public char nextChar() { return SYMBOLS[nextInt(SYMBOLS.length)]; } public String nextString(int length) { StringBuilder stringBuilder = new StringBuilder(length); while (--length >= 0) { stringBuilder.append(nextChar()); } return stringBuilder.toString(); } } А ещё есть java.util.UUID |
Сообщ.
#3
,
|
|
|
Цитата wind @ А вот мой вариант: .... .... Спасибо. Изменил вот как - чтобы символы брались из массива: так действительно лучше (по подобию Вашей программы): public class GeneratorPatientID{ Random randomTimems=new Random(new Date().getTime()); Random randomCharandPos=new Random(); private static final char[] SYMBOLS = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' }; private String generateRandom() { return Integer.toString(Math.abs(randomTimems.nextInt())); } private char generateChar(){ int charNumber=Math.abs(randomCharandPos.nextInt(SYMBOLS.length)); return SYMBOLS[charNumber]; } private int generatePosition(String timems){ return Math.abs(randomCharandPos.nextInt(timems.length())); } public String getCode(){ String timems=generateRandom(); for(int i=0;i<4;i++){ int pos=generatePosition(timems); timems=timems.substring(0,pos)+generateChar()+timems.substring(pos+1); } return timems; } } Но все-таки это довольно громоздко.. Ну и количество символов скачет в результате, конечно. |