web-dev-qa-db-fra.com

Pourquoi md5 ('240610708') est égal à md5 ('QNKCDZO')?

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

Sortie:

bool(true)

Exemple: http://3v4l.org/2vrMi

24
Farid Movsumov

Le résultat de md5('240610708') est 0e462097431906509019562988736854.

Le résultat de md5('QNKCDZO') est 0e830400451993494058024219903391.

Ce sont les deux chaînes de format de nombre flottant ( chaînes numériques ), et si vous utilisez == en php, lorsque vous comparez un nombre avec une chaîne ou que la comparaison implique des chaînes numériques, chaque chaîne est convertie en nombre et la comparaison est effectuée numériquement.

Les deux chaînes sont converties en 0 Par rapport à ==, Si vous souhaitez les comparer en tant que chaîne, n'oubliez pas d'utiliser === ( comparaison stricte ) à la place.

Voir: PHP exprime deux chaînes différentes pour être identiques

40
xdazz

Vous devez utiliser l'opérateur de comparaison sensible au type ===.

Les hachages correspondent à 0e462097431906509019562988736854 et 0e830400451993494058024219903391, respectivement. Lorsque vous utilisez ==, chacun est converti en une représentation numérique à cause du e (notation scientifique), donc ils deviennent chacun 0. 0 == 0 est vrai.

D'un autre côté, ceci:

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

renvoie false car les valeurs chaîne sont différentes. === force la comparaison sensible au type.

11
elixenide