Генерация 10-значных пин-кодов

kruglov

Новичок
Хм, а почему вообще "похожесть" пинов является проблемой?
А пины 123456 и 654321 похожи? А 111111 и 999999?

При случайной генерации на 3-4 пары "похожих" будет 1000...0000 пар непохожих. И хоть обподбирайся.

p.s. У этих пинов (если представлять себе интернет-карточки) номера-то есть?

Вероятность угадать и номер, и пин есть, но она ниже, чем вероятность получить метеоритом по голове. Но вторая проблема почему-то никого не заботит.
 

Bermuda

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

> 1026587982 и 1037587982 похожи (теоретически зная первый можно подобрать второй)

теоретически зная первый,
1026587982
можно еще подобрать
1027687982
1026697982
1026598982
1026589082
1026587092
1026587993
и т. д.

Ну похожи они, а дальше-то что?
 

Vallar_ultra

Любитель выпить :)
2Bermuda
В ТЗ запись о том чтобы избавиться от прогнозируемости минимум по двум числам.....
 

kruglov

Новичок
А чем не прогнозируемость - если есть номер 1026587982 - то 1027687982, 1026697982 и 1026587993 можно и не пытаться подбирать?

Фигня получается, а не увеличение безопасности.
 

Wicked

Новичок
вообще, интересует цена вопроса: что будет если кто-то таки подберет пин? :)

можно перенести задачу на на карты экспресс-оплаты сотовой связи (длина кодов у них от 12 до 16 цифр). При этом разница с твоими 10ю цифрами наверняка в некоторых случаях компенсируется отношением кол-ва карт и твоих занятых пинов. И от переборов их наверняка спасает не умное распределение пинов, а тупая раздача банов любителям халявы.
 

Vallar_ultra

Любитель выпить :)
2Wicked

Ну цена вобщем не маленькая (карты оплаты траффика для инета )..... тока минимальная карта 50 баксов. Но всё-таки лучше заставить любителей халявы платить чем их банить.
 

kruglov

Новичок
Wicked
У карт экспресс-оплаты вообще кроме пина еще дофига цифр есть. В отличие от.

Vallar_ultra
Вообще, поломают вас. Посчитайте на досуге, какова вероятность угадать хотя бы один пин тупым перебором случайными числами за 1000 попыток, если цифр 10, пинов 100 000.
 

yugene

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

CMD

Новичок
imho действительно лучче всего ввести еще одно неизвестное как "номер карты"
 

BNS

Новичок
Лучше всего всетаки 2 числа, одно генеренное, второе - генеренное на базе первого (как проверочное), посредством какого-то дикого алгоритма. плюс зачем ограничиваться только цифрами =)
 

Wicked

Новичок
Лучше всего всетаки 2 числа, одно генеренное, второе - генеренное на базе первого (как проверочное), посредством какого-то дикого алгоритма.
зачем? (учитывая, что если все пинкоды хранятся в базе)
 

dr-sm

Новичок
Вот передомной лежит универсальная карта оплаты моего провайдера, на ней:
1. Код: 10цифр
2. Серийный №: 6 цифр.
3. Номинал: 500 рублей.

Предлагаю генерить:
1. Случайное число.
2. Уникальное значение, для идентификации конкретной карты.

В базе хранить как:
serial - серийник
value - номинал
xcode - sha(serial + value + pincode).

Если твою базу кто-то сдернет, то ничего страшного,
а вот если там будут пины в открытом виде... :)
 

BNS

Новичок
Wicked
нельзя... лучше хранить только первое число, и знать алгоритм его хеширования во второе, проверочное

я более чем уверен, что везде так и делается...
 

bgm

 
Хм. 10 знаков, значит можно сгенерировать 9 миллионов карточек, каждая из которых имеет уникальный пинкод, лежащий в интервале длиной в 1000. А если добавить хеширование, то всё становится ещё яснее.
 

С.

Продвинутый новичок
Дарю идею. Старую, как ЕС ЭВМ. Генеришь 9 цифр произвольно, а десятая - контрольная, расчитанная из первых девяти по специальному алгоритму.

Вместо одной контрольной цыфры можешь использовать 2-3 в разных позициях. Тут тебе и "непохожесть" номеров и контроль опечаток в одном флаконе.
 
Сверху