Php 计算IBAN帐号
我已找到此wiki页面: 我遵循如下步骤:Php 计算IBAN帐号,php,Php,我已找到此wiki页面: 我遵循如下步骤: $iban = 'GB82WEST12345698765432'; $bankname = substr($iban, 0, 4); $accountnumber = substr($iban, 4); $country = $this->convertToNumber($bankname); $number = ($accountnumber . $country); $area = substr($number, 0,
$iban = 'GB82WEST12345698765432';
$bankname = substr($iban, 0, 4);
$accountnumber = substr($iban, 4);
$country = $this->convertToNumber($bankname);
$number = ($accountnumber . $country);
$area = substr($number, 0, 4);
$accountnumber = substr($number, 4);
$number = $this->convertToNumber($area) . $accountnumber;
var_dump('3214282912345698765432161182');
var_dump($number);
现在我有了与示例中相同的数字。输出:
string 'GB82WEST12345698765432' (length=22)
string '3214282912345698765432161182' (length=28)
string '3214282912345698765432161182' (length=28)
如果我现在这样做3214282912345698765432161182 mod 97=1
:
var_dump($number % 97);
我得到:int 78
结果是
1
。我做错了什么?维基为不支持bignumber(需要220位整数)的langague提供了一个解决方案:
<?php
$iban = "3214282912345698765432161182";
$first = substr($iban, 0, 9);
$array = str_split(substr($iban, 9),7);
$result = $first % 97;
foreach ($array as &$value) {
$result = intval( strval($result) . $value) % 97;
}
if ($result == 1) {
echo "IBAN:$iban is valid";
} else {
echo "IBAN:$iban invalid remainder:$result";
}
?>
运行测试:
IBAN:3214282912345698765432161182有效
wiki为不支持bignumber的langague提供了一个alogrithm(它需要220位整数):
<?php
$iban = "3214282912345698765432161182";
$first = substr($iban, 0, 9);
$array = str_split(substr($iban, 9),7);
$result = $first % 97;
foreach ($array as &$value) {
$result = intval( strval($result) . $value) % 97;
}
if ($result == 1) {
echo "IBAN:$iban is valid";
} else {
echo "IBAN:$iban invalid remainder:$result";
}
?>
运行测试:
IBAN:3214282912345698765432161182有效
wiki为不支持bignumber的langague提供了一个alogrithm(它需要220位整数):
<?php
$iban = "3214282912345698765432161182";
$first = substr($iban, 0, 9);
$array = str_split(substr($iban, 9),7);
$result = $first % 97;
foreach ($array as &$value) {
$result = intval( strval($result) . $value) % 97;
}
if ($result == 1) {
echo "IBAN:$iban is valid";
} else {
echo "IBAN:$iban invalid remainder:$result";
}
?>
运行测试:
IBAN:3214282912345698765432161182有效
wiki为不支持bignumber的langague提供了一个alogrithm(它需要220位整数):
<?php
$iban = "3214282912345698765432161182";
$first = substr($iban, 0, 9);
$array = str_split(substr($iban, 9),7);
$result = $first % 97;
foreach ($array as &$value) {
$result = intval( strval($result) . $value) % 97;
}
if ($result == 1) {
echo "IBAN:$iban is valid";
} else {
echo "IBAN:$iban invalid remainder:$result";
}
?>
运行测试:
IBAN:3214282912345698765432161182有效
不幸的是,PHP不能很好地处理这些庞大的数字。 您所需要的只是将数字存储为任意数字,并使用适当的PHP功能。 请检查BCMath。 例子很清楚:
php > var_dump(bcmod('3214282912345698765432161182',(int)97));
string(1) "1"
为了方便起见,您应该以字符串的形式传递这个巨大的数字,这样PHP就不会破坏它,在这种情况下,如果您以int的形式传递这个巨大的数字,那么结果将是“1”-在到达bcmod()之前,它将变为float,结果将是“0” 不幸的是,PHP处理大量数据的能力很差。 您所需要的只是将数字存储为任意数字,并使用适当的PHP功能。 请检查BCMath。 例子很清楚:
php > var_dump(bcmod('3214282912345698765432161182',(int)97));
string(1) "1"
为了方便起见,您应该以字符串的形式传递这个巨大的数字,这样PHP就不会破坏它,在这种情况下,如果您以int的形式传递这个巨大的数字,那么结果将是“1”-在到达bcmod()之前,它将变为float,结果将是“0” 不幸的是,PHP处理大量数据的能力很差。 您所需要的只是将数字存储为任意数字,并使用适当的PHP功能。 请检查BCMath。 例子很清楚:
php > var_dump(bcmod('3214282912345698765432161182',(int)97));
string(1) "1"
为了方便起见,您应该以字符串的形式传递这个巨大的数字,这样PHP就不会破坏它,在这种情况下,如果您以int的形式传递这个巨大的数字,那么结果将是“1”-在到达bcmod()之前,它将变为float,结果将是“0” 不幸的是,PHP处理大量数据的能力很差。 您所需要的只是将数字存储为任意数字,并使用适当的PHP功能。 请检查BCMath。 例子很清楚:
php > var_dump(bcmod('3214282912345698765432161182',(int)97));
string(1) "1"
为了方便起见,您应该以字符串的形式传递这个巨大的数字,这样PHP就不会破坏它,在这种情况下,如果您以int的形式传递这个巨大的数字,那么结果将是“1”-在到达bcmod()之前,它将变为float,结果将是“0” 可能php不处理大整数。这是维基上的解释。在python中,结果是1。谷歌搜索似乎能有所帮助?顺便说一句,wiki解释了如何使用不处理大整数的langague计算模。毕竟我使用了来自symfony2的IBAN验证:(>=symfony2.3)php可能不处理大整数。这是维基上的解释。在python中,结果是1。谷歌搜索似乎能有所帮助?顺便说一句,wiki解释了如何使用不处理大整数的langague计算模。毕竟我使用了来自symfony2的IBAN验证:(>=symfony2.3)php可能不处理大整数。这是维基上的解释。在python中,结果是1。谷歌搜索似乎能有所帮助?顺便说一下,维基解释一下