Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 计算IBAN帐号_Php - Fatal编程技术网

Php 计算IBAN帐号

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,

我已找到此wiki页面:

我遵循如下步骤:

$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提供了一个解决方案:

  • 从D最左边的数字开始,用前9位数字构造一个数字,并称之为N
  • 计算N模97
  • 通过将上述结果(步骤2)与D的后续7位数字连接起来,构造一个新的9位N。如果D中剩余的数字少于7位,但至少有一位,则根据上述结果(步骤2)和D的后续数字,构造一个新的N,该N将少于9位
  • 重复步骤2-3,直到处理完D的所有数字
  • 在php作品中对此进行编码,结果为1

    <?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位整数):

  • 从D最左边的数字开始,用前9位数字构造一个数字,并称之为N
  • 计算N模97
  • 通过将上述结果(步骤2)与D的后续7位数字连接起来,构造一个新的9位N。如果D中剩余的数字少于7位,但至少有一位,则根据上述结果(步骤2)和D的后续数字,构造一个新的N,该N将少于9位
  • 重复步骤2-3,直到处理完D的所有数字
  • 在php作品中对此进行编码,结果为1

    <?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位整数):

  • 从D最左边的数字开始,用前9位数字构造一个数字,并称之为N
  • 计算N模97
  • 通过将上述结果(步骤2)与D的后续7位数字连接起来,构造一个新的9位N。如果D中剩余的数字少于7位,但至少有一位,则根据上述结果(步骤2)和D的后续数字,构造一个新的N,该N将少于9位
  • 重复步骤2-3,直到处理完D的所有数字
  • 在php作品中对此进行编码,结果为1

    <?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位整数):

  • 从D最左边的数字开始,用前9位数字构造一个数字,并称之为N
  • 计算N模97
  • 通过将上述结果(步骤2)与D的后续7位数字连接起来,构造一个新的9位N。如果D中剩余的数字少于7位,但至少有一位,则根据上述结果(步骤2)和D的后续数字,构造一个新的N,该N将少于9位
  • 重复步骤2-3,直到处理完D的所有数字
  • 在php作品中对此进行编码,结果为1

    <?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。谷歌搜索似乎能有所帮助?顺便说一下,维基解释一下