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

Я разрабатываю приложение, в котором пользователь
аутентифицируется только в том случае, если он вводит серийный ключ
правильно. Этот серийный ключ совпадает с серийным ключом, уже
присутствующим в базе данных. Этот серийный ключ должен состоять из
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` .

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