【发布时间】:2014-07-21 14:35:15
【问题描述】:
基本上,我正在开发一个特定模块中的卡片管理系统,该模块负责创建连续的批量卡片。这些卡有 19 位长,因为这些卡有货币价值,我需要存储整个卡的价值。奇怪的是,系统在管理 VISA 卡号递增时没有任何问题,而且这些卡号长度为 16 位。我假设最后 3 位数字是破坏功能的原因,但我不知道如何处理这个问题,因为我以前从未处理过如此大的值。
$seqArray = array();
for($i = $_POST['startcardnumber']; $i <= $_POST['endcardnumber']; $i++) {
$i = sprintf('%0.0f',$i);
if(strlen($i) < $count) { $i = str_pad($i, $count, '0', STR_PAD_LEFT); }
array_push($seqArray, $i);
}
非常感谢任何帮助。
感谢 Fluffeh,我发现 BC 数学函数正是我所需要的。下面是我用来计算和增加卡号的新 for 循环。
$seqArray = array();
for($s = $_POST['startcardnumber'], $e = $_POST['endcardnumber'];bccomp($s,$e) != 1; $s = bcadd($s, 1)) {
if(strlen($s) < $count) { $s = str_pad($s, $count, '0', STR_PAD_LEFT); }
array_push($seqArray, $s);
}
【问题讨论】:
-
查看BC Math 函数。这些可以处理大整数(PHP 默认使用 32 位整数 - 正如您所发现的那样最大)。