Создайте уникальное 4-байтовое целое число из строки в PHP - PullRequest
4 голосов
/ 27 февраля 2012

У меня есть таблица SQL, которая использует строки для ключа. Мне нужно преобразовать эту строку (максимум 18 символов) в уникальное (!) 4-байтовое целое число с помощью PHP. Кто-нибудь может помочь?

Ответы [ 3 ]

1 голос
/ 27 февраля 2012

Уникальный?Не возможно, извините .

Давайте подробнее рассмотрим:

С 18 символами, даже если бы мы предполагали только 128 возможных символов ASCII (7 бит), вы получили бы 128 ^ 18 возможных строк (иЯ даже не буду рассматривать возможность более коротких строк!), Что составляет около 8E37 (8 и 37 нулей).

С 4-байтовым целым числом вы получаете 256 ^ 4 возможных целых чисел, которыепримерно 4E9 (4 миллиарда).

Итак, у вас примерно на 4E28 больше строк, чем у целых чисел;у вас не может быть уникального сопоставления.

Поэтому вы обязательно столкнетесь с коллизией, как только введете 4294967297-й ключ, но можно столкнуться с одним, как только вы введете более одного.

Смотри также: http://en.wikipedia.org/wiki/Pigeonhole_principle

0 голосов
/ 27 февраля 2012

Вы не можете.Четырехбайтовое целое число может представлять 2 ^ 32 = 4 миллиарда значений, что недостаточно для хранения целевого пространства.

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

0 голосов
/ 27 февраля 2012

Хранить таблицу поиска строк в целых числах. Каждый раз, когда вы сталкиваетесь с новой строкой, вы добавляете ее в таблицу сопоставления и назначаете ей новый уникальный идентификатор. Это будет работать для примерно 2 ^ 32 строк, что, вероятно, достаточно.

Нет способа сделать это для более чем 2 ^ 32 различных строк.

...