首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算IBAN帐号

计算IBAN帐号
EN

Stack Overflow用户
提问于 2014-01-12 16:47:18
回答 2查看 1.8K关注 0票数 0

我找到了这个wiki页面:IBAN

我遵循这样的步骤:

代码语言:javascript
复制
$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);

所以现在我有了和这个例子相同的数字。产出:

代码语言:javascript
复制
string 'GB82WEST12345698765432' (length=22)

string '3214282912345698765432161182' (length=28)

string '3214282912345698765432161182' (length=28)

如果我现在做了,3214282912345698765432161182 mod 97 = 1

代码语言:javascript
复制
var_dump($number % 97);

我明白了:int 78

结果是1。我做错什么了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-12 17:31:28

不幸的是,PHP很难处理大量的数据。您所需要的只是将数字存储为任意数字,并使用适当的PHP功能。请查一下BCMath。这个例子很清楚:

代码语言:javascript
复制
php > var_dump(bcmod('3214282912345698765432161182',(int)97));
string(1) "1"

考虑到这一点,您应该将这个巨大的数字作为一个字符串传递,这样PHP就不会破坏它,在这种情况下,结果将是"1",如果您要将这个巨大的数字作为int传递--它将在到达bcmod()之前变成浮点,最后您将收到"0“。

票数 1
EN

Stack Overflow用户

发布于 2014-01-12 17:29:03

wiki为langague提供了一个不支持大数的alogrithm (它需要220位整数):

  1. 从D的最左边数开始,用前9位数构造一个数字,并称之为N。
  2. 计算N 97。
  3. 通过将上述结果(步骤2)与后面的7位数字D连接起来,构造一个新的9位数N。如果D中剩余的数字少于7位,但至少有1位数,则根据上述结果(步骤2)构造一个新的N,该N的数字小于9位,后面是D的其余数字。
  4. 重复步骤2-3,直到处理完D的所有数字为止。

在php works中对此进行编码,结果为1。

代码语言:javascript
复制
<?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";
}

?>

运行测试:http://ideone.com/1XNE2b

IBAN:3214282912345698765432161182有效

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21077360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档