Почему md5 ('240610708') равен md5 ('QNKCDZO')?
var_dump(md5('240610708') == md5('QNKCDZO'));
Выход:
bool(true)
Пример: http://3v4l.org/2vrMi
Ответы
Ответ 1
md5('240610708')
результат 0e462097431906509019562988736854
.
md5('QNKCDZO')
результат 0e830400451993494058024219903391
.
Они являются строками чисел с плавающей запятой (числовые строки), и если вы используете ==
в php, когда сравниваете число со строкой или сравниваете, числовые строки, то каждая строка преобразуется в число и сравнение выполняется численно.
Обе строки преобразуются в 0
по сравнению с ==
, если вы хотите сравнить их как строку, не забудьте использовать ===
(строгое сравнение).
Смотрите: PHP выражает две разные строки одинаковыми
Ответ 2
Вам нужно использовать оператор сравнения с типом ===
.
Хеши оцениваются соответственно 0e462097431906509019562988736854
и 0e830400451993494058024219903391
. Когда вы используете ==
, каждый преобразуется в числовое представление из-за e
(научная нотация), поэтому каждый из них становится 0
. 0 == 0
истинно.
С другой стороны, это:
md5('240610708') === md5('QNKCDZO')
возвращает false
, потому что значения строк различаются. ===
усиливает чувствительное к типу сравнение.