>>121592
А нахуя? И так ясно как жто все работает: rfid даже прошивать смысла нет, достаточно закупать у производителя уже зашитые (они все идут с уникальным id). Как те же домофонные таблетки или телефонные карты.
Компания получает ящик этих карточек, садит макаку за еду перед "программатором" вся суть которого - считывание айдишника с карты, поиск его в своей бд.
Если совпадений нет - записывает айдишник в базу, привязывает к нему счет, активирует его, пополняет его дефолтной суммой.
Если есть совпадение - пищит, карта не пригодна для эксплуатации, ее откладывают в стопку брака, и через год проверяют еще раз.
Если деактивирована, и срок менее 6 месяцев (условно) - то же самое, пищит, откладывают в ту же стопку брака. Если деактивирована, и срок более 6 месяцев - карта пригодна, счет активируется, обнуляется, и пополняется дефолтной суммой.
Итого на выходе имеем 2 стопки: годные, готовые к продаже, карты, и брак, который годен, но не сегодня - его следует отправить на склад, и через год достать, и опять посадить макаку пробивать айдишники - авось какие-то счета за это время окажутся неиспользуемыми, и срок ожидания (6 месяцев) на них выйдет.
На самих карточках заказываем надпись: карта сгорает при неиспользовании в течении 6 месяцев.
Чтоб не было вопросов, почему карточка не работает.
Далее, сливаем эту БД раз в сутки на борты транспорта. Нужно это для автономности - транспорт не всегда в сети.
Плюс бортовой комп транспорта постоянно синхронизирует внутреннюю бд с главной, если сеть таки есть.
И вот ты такой крутой, идешь к киоске, покупаешь карточку, там уже лежит 100 рублей. Подходишь к банкомату, вставляешь карточку, банкомат считывает айдишник, сверяется по БД - если счет есть и активен, начинает тебе мигать светодиодами, мол гони бабло.
Если неактивен или не существует - посылает тебя нахуй, и ты с горя выбрасываешь бесполезную теперь карточку. Потому что не пользовался ей более 6 месяцев, или же это левая карта и ты - какер с неверным айдишником.
Вот, значит, суешь в банкомат бабло - он тебе показывает сумму на экране, соглашаешься - во внутреннюю БД борта/банкомата (иногда банкоматы стоят прямо на борту транспорта) записывается что-то типа: 12:34:22 1.1.2014 айдишник твоей карточки +20руб.
При первой же синхронизации с общей базой эта, и другие подобные строчки, апплоадятся на главный сервак - борт посылает коммиты.
В чем прелесть - даже если борт не имеет связи с главным серваком, он все-равно пополнит счет твоей карточки, и ты сможешь ею оплатить проезд на борту, или узнать баланс счета - по бортовой бд. Но для другого борта твоя карточка останется непополненной, пока оба борта не синхронизируются с серваком. Обычно задержка составляет около 20 минут - примерно таков максимальный таймаут без связи с серваком, ну там ветка без сети, авария на линии, и т.п. форсмажоры. И это более чем приемлемо - борт не стоит на месте, и быстро выходит из зоны без связи, и твоя карточка оживает.
Теперь, пополнив карточку, ты поднимаешься на борт, и проводишь ей над приемником. В этот момент приемник считывает айдишник твоей карточки, пробивает его по бортовой бд, и если находит активный счет с достаточной суммой - пипикает тебе, мол все заебись, проходи.
В этот момент в лог добавляется строчка вида 12:44:22 1.1.2014 айдишник твоей карточки -15руб.
Т.е. то же самое - даже если борт еще не синхронизирован, но твоя карточка была не пустая - он тебя пропустит, а средства с реального счета спишет после синхронизации, когда пошлет коммит на сервак.
Но если у тебя счет активен, но сумма недостаточна, возможны две реакции: тебя посылают нахуй. И это неправильно - а вдруг ты только что ее пополнил?
И более гуманная - тебя пропускают, и в бортовой бд твой баланс становится отрицательным. При отрицательном балансе карта считается блокированной, и второй раз ты не прокатишься на том же борту. Но прокатишься на следующем, если прошлый и следующий борты не успели синхронизировать базы. Т.е. есть возможность наеба системы и прокатиться несколько раз на халяву. Но я считаю - это норм, т.к. подобное возможно лишь при косяках со стороны транспортной компании, т.е. сами виноваты. Зато из-за этих косяков клиенту не будет принесено неудобств, когда пополненная, но не успевшая синхронизироваться карта не пускает клиента на борт - репутация всяко дороже, чай не совок, клиент всегда прав, а издержки так и так будут погашены с лихвой, за счет блокировки непустых счетов, которыми давно никто не пользуется. Тем более кататься так можно далеко не всегда, а только когда счет почти на нуле, и нет сети. Т.е. при потере связи, если накроется вся система, люди по крайней мере смогут ездить, пользоваться карточками.
А позже, при восстановлении связи, все коммиты все-равно уйдут на сервак, и со счета так и так спишется вся потраченная сумма. И клиент сможет либо пополнить карточку опять (и тогда издержки от такого клиента равны нулю), либо выбросить ее (и тогда издержки будут оплачены из резервного фонда+неактивные счета), или же, если контора цивилизованная - карточка с отрицательным балансом превратится в заблокированную карточку с нулевым балансом, и клиент не испугается отрицательной суммы, продолжит ее юзать, а издержки покроются как и во втором варианте.
Заблокированные карты со сроком неиспользования менее 6 месяцев, разблокируются при пополнении счета. Т.е. если у тебя на счете почти ноль, и ты на одном борту прокатился, и он твоя карточку зблокировал, потом провел синхронизацию, и ты сел в следующий борт - тебя уже не пустит, т.к. денег на счете нет. Т.е. исключается ошибка, когда тебя не пускют, но счет ты пополнил - здесь синхронизация была, и если бы ты пополнил, твой счет был бы разблокирован и твоя прошлая поездка автоматом бы списалась со счета - хоть ты и наебал систему, но за это заплатил, и не испытал неудобств, когда тебя не пускают при пополненном несинхронизированном счете - одна поездка тебе дается на веру, и если ты счет не пополнял - считай и на халяву, а если пополнял - ты ее оплачиваешь поздним числом, при синхронизации. Все цивильно и культурно.
Такая вот хуйня.
Если ты попытаешься наебать систему с околонулевым непополненным счетом - сможешь наебать на одну поездку, больше - только если вся сеть упадет, но тогда так и так все катаются бесплатно - технические проблемы не должны ебать клиентов, им на работу надо, сам проебал обслуживание сети, сам и плати.
Если захочешь наебать с айдишниками/левой картой - в 99,99999% случаев тебя пошлют на хуй, ибо диапазон айдишников на много порядков больше количества карт на руках, как в хэшах. И брутфорс не прокатит - придется недели ночевать около приемника, парализуя его работу - тебя за такое на мороз выкинут.
То же самое с просроченной картой - шанс, что через год она активируется, стремится к нуля, из-за большого диапазона. Но он есть. И это не проблема - за 10 лет от такого пострадает едва ли несколько челов во всем ДС, это легко списать на страшных хацкеров, которые якобы ломанули счет, такие вот они нехорошие. Т.е. поездить по ушам и послать на хуй, потому что доказать что ни так - нельзя, как и доказать, что клиент реально пострадал, а не пытается тебя наебать. Если начать компенсировать - тут же нарисуются еще 100500 умников, утверждающих то же самое, и они уже будут врать на 100%.
Как видишь - ничего сложного. Любой студент-первокурсник сможет в одиночку поднять и наладить всю такую сеть целиком: создать платку, заказать 100500 штук, в корпусах - ставить на борты и в терминалы оплаты. Написать для нее прошивку. Поднять центральный сервак. Заказать 3 ящика карточек. Послать безмозглых обезьян за еду монтировать эти модули в транспорт, и пробивать карточки на сервак днями и ночами, вручную - мозгов нет, пущай вкалывают. Заставить их рассортировать годные карточки на кучки, и каждую кучку под роспись развозить по киоскам - под роспись: сколько получил, сколько сдал. Не наебешь.