Вы можете взглянуть на открытый исходный код Twitter Проект Snowflake для вдохновения, которое решает аналогичную проблему.Он написан на Scala, но упрощенная версия довольно проста для кодирования на C #.
Предположение состоит в том, чтобы получить текущую временную метку и сдвигать ее по битам влево, оставляя правые биты доступными для простого порядкового номера, который сбрасывается в 0 каждый раз, когда увеличивается отметка времени.
Играя с длинами битов и изменяя гранулярность вашей отметки времени (например, решая, использовать ли секунды или миллисекунды), вы должны быть в состоянии произвестичто-то, что может вписаться в 17 цифр довольно просто.