Как правильно генерировать уникальный код из алфавита?

Дан алфавит из которого может состоять код:
var lang = ['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','0',
	'1','2','3','4','5','6','7','8','9'];


Моя "Кривая" реализация
function codeGen(id) {
        var lang = ['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','0','1','2','3','4','5','6','7','8','9'];
        var code= '';
        while(id !==0){
            if(id<=lang.length){
                code = code +  lang[id-1];
                id =0;
            } else{
                var del = Math.floor(id / lang.length);
                var ost = id-del*lang.length;
                id = del;
                code = code + lang[ost-1];
            }
        }
        return code;
    }


Подскажите пожалуйста как сделать правильно, или дайте какую-то информацию.
Большое спасибо за ответ.
  • Вопрос задан
  • 667 просмотров
Решения вопроса 1
Stalker_RED
@Stalker_RED
id.toString(36) Не это ли вы ищете?
демо: https://jsfiddle.net/xjzL2L3u/
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
roswell
@roswell
и швец, и жнец, и на дуде игрец
function codeGen( number ) {
    var base = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'.split( '' );
    var result = '', quotient, remainder;
    do {
        quotient = Math.floor( number / base.length );
        remainder = number % base.length;
        number = quotient - 1;
        result = base[ remainder ] + result;
    } while ( quotient > 0 );
    return result;
}
Ответ написан
vesper-bot
@vesper-bot
Любитель файрволлов
В принципе, "правильно" - нет такого понятия, и для определения "правильности" алгоритма недостаточно данных. Я бы добавил в генерируемый код 1-2 символа "контрольной суммы", либо код односимвольной коррекции ошибок, чтобы в случае ошибок при передаче или интерпретировании кода его можно было бы восстановить, и не было бы так просто организовать атаку перебором на код с целью добыть неизвестные ресурсы.
Ответ написан
Комментировать
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Вариант 1. Генерируем код, проверяем на уникальность, если не уникален - начинаем сначала.
Вариант 2. Описываем уникальное отображение (порядковый номер <=> код), генерируем код по номеру.
Ответ написан
Комментировать
@d-stream
Готовые решения - не подаю, но...
Судя по описанию, самый "интересный" вариант будет - перемешивание: меняем местами случайно выбранные позиции... и так много раз. Количество элементов алфавита не меняется, но меняется их порядок.

В давние-давние времена баловались так с vga видеобуфером в текстовом режиме
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы