Лучше всего воспользоваться базой данных. Сейчас практически в любой можно реализовать Time To Live, по сути - срок жизни записи.
В комментах вы пишите, что запросы будут приходить часто и много - в этом случае действительно с файлом могут возникнуть проблемы.
Если вас смущает накладные расходы на обращение к данным в БД - прочитайте про IN-MEMORY. В MySQL кстати оно есть (не помню в какой версии, в MariaDB 10 точно видел упоминание).
Лично я бы взял Redis и работал бы с ней, благо данных не много, ОЗУ много не потребуется. А работает она очень быстро. И функциональность достаточная, что потом может пригодится для хранения других данных или например для реализации очередей, хранения сессий, оповещений и т.п. А TTL там заложено на уровне движка - добавляете запись, при добавлении можно сразу установить срок жизни в секундах и запись сама удалится по истечении времени. А можно без указания TTL (в 0) и тогда запись не удалится.
Так и вижу - заносите доступные пин-коды с TTL=0, а когда их активируют - указываете для записи TTL нужной длительности и с момента первой активации начинает тикать счетчик. Удобно же и никаких велосипедов изобретать не надо. С Redis работать просто почти в любом ЯП сейчас, очень простое и легкое API.