小编Bar*_*art的帖子

计算PL/SQL中大数的模数

我正在尝试计算PL/SQL中的大模数.我实现了一个我在这个位置找到的方法:http://en.wikipedia.org/wiki/International_Bank_Account_Number在IBAN上的Modulo操作下.但是当我使用这个数字时,我得到错误的结果:221021290110000123452229211210282900128222984.

这是该方法需要完成的方式:

分段计算D mod 97可以以多种方式完成.一种方法如下:

  1. 从D的最左边数字开始,使用前9位数字构造一个数字并将其称为N.
  2. 计算N mod 97.如果结果小于10,则在结果前面加上0,结果范围为00到96.
  3. 通过将上述结果(步骤2)与D的下一个7位数连接起来构造一个新的9位数N.如果D中剩余的数字少于7位但至少有一位,则构造一个新的N,其数小于9数字,从上面的结果(步骤2)开始,接着是D的剩余数字
  4. 重复步骤2-3,直到处理完D的所有数字

步骤2中的最终计算结果将是D mod 97 = N mod 97.

我做了一些日志记录,这些是所有模数步骤的结果:

221021290110000123452229211210282900128222984 (221021290 % 97 = 0)
00110000123452229211210282900128000000 (001100001 % 97 = 21)
2123452229211210282900128000000 (212345222 & 97 = 0)
009211210282900128000000 (009211210 % 97 = 90)
90282900128000000 (902829001 % 97 = 46)
4628000000 (462800000 % 97 = 2)
020 = 20
Run Code Online (Sandbox Code Playgroud)

结果需要是1.我用模数计算器检查它,它需要是1.对于大多数数字,calcutor是正确的.

这是我制作的代码,这个数字怎么可能不正确:

create or replace function doubleDiget (iban number)
return varchar2
as
begin
  if(iban <= 9) then
    return …
Run Code Online (Sandbox Code Playgroud)

plsql modulus

5
推荐指数
1
解决办法
1692
查看次数

标签 统计

modulus ×1

plsql ×1