«
生产中的序列号因php弱类型带来的问题

时间:2025-9-11    作者:范文泉    分类: php


$a['modulesn'] = "0542509004725";  
$b = "00542509004725";

一个是 以 0 开头,另一个是 以 00 开头。
按理说用 != 应该返回 true(不相等),但你说结果是 false(相等)。

原因:PHP 的弱类型比较(类型转换问题)

在 PHP 里,!=、== 会触发 弱类型比较:
如果两个字符串看起来都是 数字字符串,PHP 会把它们转换成数字再比较。
"0542509004725" 和 "00542509004725" 都会被转换成 542509004725(整数)。
转换后它们相等,所以 != 返回 false。

验证

var_dump((int)"0542509004725");   // int(542509004725)
var_dump((int)"00542509004725");  // int(542509004725)

结果一样。

解决办法

如果你想比较字符串本身,而不是数值:

用 全等比较 !== 或 ===

var_dump($a['modulesn'] !== $b); // true

或者强制用 字符串比较函数

var_dump(strcmp($a['modulesn'], $b) !== 0); // true

建议:凡是涉及可能带前导 0 的数据(比如条码、序列号、工号),一定要用 === 来比较,不要用 == 或 !=。