Создание большого количества случайных последовательных ключей

Я разрабатываю приложение, в котором пользователь аутентифицируется только в том случае, если он вводит серийный ключ правильно. Этот серийный ключ совпадает с серийным ключом, уже присутствующим в базе данных. Этот серийный ключ должен состоять из 6 цифр и 3 алфавитов. Пользователи получают этот ключ в письменной форме от меня.

Как я могу генерировать большое количество (100 000 000 приблизительно) серийных ключей?

На мой взгляд, самый простой способ:

1. find a desired number in range `[1,10000000)`, let it be `x` and it
will represent your 6 digits.
2. Find 3 characters (let's assume in range a-z). Let them be `a,b,c`.
3. Your number is `(a-'a' + b-'a'*26 + c-'a'*26*26)*10000000 + x`

(Где 'a' - это ascii-представление символа  `'a'` , а a-'a 'означает числовое вычитание ascii)

Обратите внимание, что сгенерированное число может даже вписываться в  `long`  - при условии, что это 64 бит.

---

Поколение нескольких чисел можно просто выполнить с помощью итерации, начиная с  `a = b = c = 'a'`  и  `x = 0` , и начать продвигаться (увеличиваться на 1) , Когда вы достигли  `x = 10000000` , увеличьте, если  `a`  передано z - увеличение  `b` , .... (похоже на то, что вы сделали бы в нормальном целочисленном арифметике).



Для генерации ключей вы можете использовать защищенный генератор случайных чисел, например  `SecureRandom` .

Но, как уже упоминалось в комментарии, если вы создаете много ключей, пространство всех возможных ключей не намного больше. Таким образом, злоумышленнику будет легко проверять ключи до тех пор, пока не будет обнаружено, что это работает.