Подтвердить что ты не робот

Почему md5 ('240610708') равен md5 ('QNKCDZO')?

var_dump(md5('240610708') == md5('QNKCDZO'));

Выход:

bool(true)

Пример: http://3v4l.org/2vrMi

4b9b3361

Ответ 1

md5('240610708') результат 0e462097431906509019562988736854.

md5('QNKCDZO') результат 0e830400451993494058024219903391.

Они являются строками чисел с плавающей запятой (числовые строки), и если вы используете == в php, когда сравниваете число со строкой или сравниваете, числовые строки, то каждая строка преобразуется в число и сравнение выполняется численно.

Обе строки преобразуются в 0 по сравнению с ==, если вы хотите сравнить их как строку, не забудьте использовать === (строгое сравнение).

Смотрите: PHP выражает две разные строки одинаковыми

Ответ 2

Вам нужно использовать оператор сравнения с типом ===.

Хеши оцениваются соответственно 0e462097431906509019562988736854 и 0e830400451993494058024219903391. Когда вы используете ==, каждый преобразуется в числовое представление из-за e (научная нотация), поэтому каждый из них становится 0. 0 == 0 истинно.

С другой стороны, это:

md5('240610708') === md5('QNKCDZO')

возвращает false, потому что значения строк различаются. === усиливает чувствительное к типу сравнение.