ermouth: (Default)
[personal profile] ermouth

Коллеги, у меня возникла необычная такая просьба.

Мы сейчас доделываем систему, в которой номера заказов – 4-символьные строки из цифр/букв. Коды эти отправляются клиенту, и нехорошо, если его заказ будет называться как-то ругательно.

В этой связи просьба накидать в комменты максимальное количество похожих на ругательства или сниженную лексику 4-символьных сочетаний, чтобы написать фильтр для генератора кодов.

Допустимые знаки – цифры и латиница (только строчные, без букв i l n q).

Date: 2016-03-03 03:35 pm (UTC)
From: [identity profile] juan-gandhi.livejournal.com
Я не так давно аналогичную штуку делал, таг для логинга. Я просто не все буквы включил.

Date: 2016-03-03 07:01 pm (UTC)
From: [identity profile] ermouth.livejournal.com
У меня в хозяйстве вот такая вот штука есть http://ermouth.livejournal.com/618514.html, вдруг вам пригодится.

Date: 2016-03-03 07:34 pm (UTC)
From: [identity profile] morfizm.livejournal.com
Мне кажется, тут снаскоку не получится хорошо. Алгоритмически я бы подошёл так:
- взять словарь слэнга - как русского, так и английского,
- сгенерить все возможные 4-буквенные подстроки,
- взять несколько алгоритмов транслитерации, транслитериоровать русское всеми способами,
- сгенерировать варианты, фонетически похожие, по таблице похожести звучания.

По-моему, куда легче сделать что-то вроде такого:
- Взять цифры 2,3,4,5,9 (без 0,1,6,7,8 - чтобы не путалось с буквами).
- Сгенерить номер заказа, чередуя буквы и цифры, по таким паттернам: ББЦЦ, БЦБЦ, БЦЦБ, ЦББЦ, ЦБЦБ, ЦЦББ, БЦЦЦ, ЦБЦЦ, ЦЦБЦ, ЦЦЦБ, ЦЦЦЦ (т.е. букв не больше 2, все варианты). Если букв не больше двух, звучать будет заведомо хорошо.

Date: 2016-03-03 07:35 pm (UTC)
From: [identity profile] morfizm.livejournal.com
Всего вариантов: 16900*6 + 3250*4 = 101400 + 13000 = 114400
Должно подойти, если заказов не более 10 тыс в год.

Date: 2016-03-03 07:52 pm (UTC)
From: [identity profile] ermouth.livejournal.com
> тут снаскоку не получится хорошо

Тут на несколько часов внимательного выписывания, не знаю, наскок это или нет. Двухбуквенных комбинаций получается меньше 500, глаз в состоянии такой длины список кусочками обработать и без словаря слэнга. Похожесть с цифрами я в этом случае пропущу кста.

> Должно подойти, если заказов не более 10 тыс в год.

Больше, не подойдёт.

Date: 2016-03-03 09:33 pm (UTC)
From: [identity profile] ermouth.livejournal.com
В результате у меня за 2 часа нарисовался регэксп длиной 588 знаков, который отбрасывает 1.78%.

Date: 2016-03-03 09:44 pm (UTC)
From: [identity profile] occam-aga.livejournal.com
Что-то не дофига матершиников в коментах :)
Надо было таг Путин ставить.

Я у себя сделал чтобы в середине обязательно была цифра. Это, конечно, не дает 100% гарантии, но сильно снижает шансы.

Мат фильтровать недостаточно, вполне безобидные слова могут выглядеть вызывающе. Для меня тригерром подумать, стала бронь с номером 2AKYNA. Учитывая, что проект для Казахстана...

Date: 2016-03-03 09:48 pm (UTC)
From: [identity profile] morfizm.livejournal.com
Выложи на веб страницу, потестим :)

Date: 2016-03-03 10:00 pm (UTC)
From: [identity profile] ermouth.livejournal.com
Спасибо, я так думал. Цифра отъедает прилично из ёмкости, мне захотелось лучше )

Date: 2016-03-03 10:01 pm (UTC)
From: [identity profile] ermouth.livejournal.com
не, что ты ) я такое не выкладываю.

Date: 2016-03-03 10:03 pm (UTC)
From: [identity profile] morfizm.livejournal.com
Заимплементи на сервер-side, и сделай страницу для теста. Можешь даже rate limit, типа 1 QPS, to make sure, что никто не хакнет твой регексп перебором.

Но это позволит вручную потестировать варианты другим людям кроме тебя.

Date: 2016-03-03 10:38 pm (UTC)
From: [identity profile] morfizm.livejournal.com
Кстати, а почему ты считаешь, что это лучше?

Если дело в запоминании - то мне как пользователю куда легче запомнить более длинное число (пусть 6 цифр), чем случайные 4 буквы алфавита. Та же фигня, если диктовать по телефону.

Плотные буквенные ID-шники хороши для short-link'ов, не задуманных как human-readable. Номер заказа же должен быть human-readable, должно быть трудно ошибиться, диктуя его по телефону, и т.п.

Я бы, наоборот, добавил бы избыточности для автокоррекции небольших ошибок. Скажем, если каждый валидный order id отличается от любого другого минимум в 3 позициях, то любая ошибка в одной позиции будет исправляма.

Ещё неплохая идея для ID-шников это нечто вроде correct horse battery staple (https://xkcd.com/936/). Конечно, нельзя, ибо слишком непривычно, но по сути может лучше подойти, чем плотный набор из 4 букв.

Date: 2016-03-03 11:05 pm (UTC)
From: [identity profile] ermouth.livejournal.com
> Кстати, а почему ты считаешь, что это лучше?

Так сложилось )


Date: 2016-03-04 02:30 am (UTC)
From: [identity profile] morfizm.livejournal.com
Навскидку как-то так: *eb*, *hue*, *hui*, *huy*, *huj*, hooe, hooi, hooy, hooj, *ezd*, *izd*, *sra*, chmo, idi*, *pid*, pop*, fuc*, shi*, *@nt, bit*, mud*.

Можно ещё посочинять :)

@ = ровно одна буква, любая гласная.
* любое количество букв, включая 0.

Date: 2016-03-04 02:32 am (UTC)
From: [identity profile] morfizm.livejournal.com
*loh*, *luh

Date: 2016-03-04 02:34 am (UTC)

Date: 2016-03-04 03:29 am (UTC)

Date: 2016-03-04 03:30 am (UTC)
From: [identity profile] theriodont.livejournal.com
suk*, suc*, zhop, gand, gond, blja, blya, gavn, govn, zalu

Date: 2016-03-04 03:41 am (UTC)
From: [identity profile] morfizm.livejournal.com
Двухбуквенные могут быть хорошие, при этом трёх или четырёхбуквенные - нет. Кроме того, плохая трёхбуквенная комбинация может быть не обязательно вначале (так что смотреть на префиксы не даст тебе 100% сoverage).

Date: 2016-03-04 09:22 am (UTC)
From: [identity profile] ermouth.livejournal.com
l выброшена, это кста немеряно всякого отсеяло автоматом.

Date: 2016-03-04 09:23 am (UTC)
From: [identity profile] ermouth.livejournal.com
Я так и делал, только по списку )

Date: 2016-03-04 09:24 am (UTC)
From: [identity profile] ermouth.livejournal.com
Спасибо. Есчо l и n запрещены по условию задачи )

Date: 2016-03-04 09:36 am (UTC)
From: [identity profile] morfizm.livejournal.com
Я сначала не заметил, сорри. Makes sense.

Date: 2016-03-05 12:35 am (UTC)
From: [identity profile] leiacat.livejournal.com
Еще нужно избегать вариантов где цифры могут заменить буквы. sh1t, d1ck, p1ss. А уж f*ck избегать со всеми цифрами.

http://www.noswearing.com/fourletterwords.php

Date: 2016-03-05 02:05 am (UTC)
From: [identity profile] ermouth.livejournal.com
Спасибо.

Profile

ermouth: (Default)
ermouth

November 2021

S M T W T F S
 123456
78910111213
14151617181920
21 222324252627
282930    

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Feb. 2nd, 2026 03:50 pm
Powered by Dreamwidth Studios