MySQL自动计算IBAN bigint溢出

时间:2013-12-05 15:40:29

标签: mysql modulo bigint iban

这是我在stackoverflow中发布的第一个问题,希望有人可以帮助我。到目前为止,我找不到有人在这里提出类似的问题。

我想检查德国IBAN是否正确。原则上,这很容易:您将Bank_number(8位)与Account_Number(10位),等于DE(1314 = 4位)的数字和一个校验码(2位)连接起来,然后计算模数除法和结果应为1。

以下是我输入MySQL的代码:

SELECT MOD(500105175404777100131451,97) as a
     , MOD(CONVERT(CONCAT("50010517","5404777100","1314","51"), UNSIGNED),97) as b
     , CONVERT(CONCAT("50010517","5404777100","1314","51"), UNSIGNED) as c

以下是我从MySQL获得的结果:

a   b    c
1   60   18446744073709551615

正如您所看到的,当我手动输入整个数字时,我得到了正确的结果(1),但是当我尝试从单独的字符串构造数字时(以这种格式,它们到目前为止保存在数据库中) ,模数除法不起作用,因为字符串被错误地转换为数字。

谁能告诉我问题是什么?

我尝试了“BIGINT”而不是“UNSIGNED”,但后来出现了错误

"You have an error in your SQL syntax; check the manual that corresponds to your MariaDB
server version for the right syntax to use near 'BIGINT"

非常感谢任何帮助。

由于 斯蒂芬

1 个答案:

答案 0 :(得分:1)

使用DECIMAL(24)数字类型。

SELECT MOD(500105175404777100131451,97) as a
     , MOD(CONVERT(CONCAT("50010517","5404777100","1314","51"), decimal(24)),97) as b
     , CONVERT(CONCAT("50010517","5404777100","1314","51"), decimal(24)) as c