Генерация 5-значного буквенно-цифрового кода с заранее определенными символами в последовательности - PullRequest
0 голосов
/ 27 октября 2018

Я хотел бы создать номер участника, состоящий из буквенно-цифровых символов, удалив i o и l, чтобы избежать путаницы при наборе текста.должно быть сделано в php (также используя Laravel 5.7, если это имеет значение - но я чувствую, что это вопрос php)

Если просто использовать 0-9, номер участника будет начинаться с 00001 для 1-го и 11-го человекабудет иметь 00011. Я хотел бы использовать буквенно-цифровые символы от 0-9 + az (удаление указанных букв)

0-9 (всего 10 символов), abcdefghjkmnpqrstuvwxyz (всего 23 символа) - это дает в общей сложности 33символы в каждом цикле счета (0-10 + аз).вместо 10 (0-10)

Таким образом, первый номер участника будет по-прежнему 00001, тогда как 12-й теперь будет 0000a, 14-й 0000c и 34-й будет 0001a.

Подводя итог, янужен способ определения символов для подсчета способом, который может быть сгенерирован на основе идентификатора пользователя.

Надеюсь, я объяснил это достаточно хорошо.

1 Ответ

0 голосов
/ 27 октября 2018

Предполагая, что это единственные символы, которые вы хотите использовать:

0123456789abcdefghjkmnpqrstuvwxyz

Вы можете использовать base_convert() и strtr() для перевода определенных символов результата в нужные вам символы.

function mybase33($number) {
    return str_pad(strtr(base_convert($number, 10, 33), [
        'i' => 'j',
        'j' => 'k',
        'k' => 'm',
        'l' => 'n',
        'm' => 'p',
        'n' => 'q',
        'o' => 'r',
        'p' => 's',
        'q' => 't',
        'r' => 'u',
        's' => 'v',
        't' => 'w',
        'u' => 'x',
        'v' => 'y',
        'w' => 'z',
    ]), 5, '0', STR_PAD_LEFT);
}

echo "9 is ".mybase33(9)."\n";
echo "10 is ".mybase33(10)."\n";
echo "12 is ".mybase33(12)."\n";
echo "14 is ".mybase33(14)."\n";
echo "32 is ".mybase33(32)."\n";
echo "33 is ".mybase33(33)."\n";
echo "34 is ".mybase33(34)."\n";

Вывод:

9 is 00009
10 is 0000a
12 is 0000c
14 is 0000e
32 is 0000z
33 is 00010
34 is 00011

https://3v4l.org/8YtaR

Пояснение

В выводе base_convert() используются следующие символы:

0123456789abcdefghijklmnopqrstuvw

strtr() преобразует определенные символы этого вывода в:

0123456789abcdefghjkmnpqrstuvwxyz
...