Чтобы сделать ваше число "более случайным", вы должны использовать
SecureRandom.random_number(10**16).to_s.rjust(16,'0')
То, является ли это "правильным" или нет, будет зависеть от конкретного варианта использования, который не указан в вашем вопросе.
Обратите внимание, что вы получите тот же номер после 10 ** 16 звонков (или раньше), вы никак не можете этого избежать.