Vbscript ASP中的数字溢出

Vbscript ASP中的数字溢出,vbscript,asp-classic,numeric,Vbscript,Asp Classic,Numeric,我正在重新访问一个旧的经典ASP应用程序,以添加一些新的必备项,其中一个需要执行算术操作以根据以下内容生成id: 根据某些规则从长字符串生成数字 获取将此长数字除以97的mod 将此结果减至98 如果结果只有一个数字,则预挂0 第一次运算的结果是1185626240142800(比最大长数多很多个数量级),我可以转换成双倍,但我无法得到mod 97 此规则是银行文件的标准,因此没有解决方法,我需要执行这些操作 在我的Windows 7 64位中,我看到我可以在SQL Server中执行此操作

我正在重新访问一个旧的经典ASP应用程序,以添加一些新的必备项,其中一个需要执行算术操作以根据以下内容生成id:

  • 根据某些规则从长字符串生成数字
  • 获取将此长数字除以97的mod
  • 将此结果减至98
  • 如果结果只有一个数字,则预挂0
第一次运算的结果是1185626240142800(比最大长数多很多个数量级),我可以转换成双倍,但我无法得到mod 97

此规则是银行文件的标准,因此没有解决方法,我需要执行这些操作

在我的Windows 7 64位中,我看到我可以在SQL Server中执行此操作,所以作为一个坏黑客,这不是一个坏主意,还有其他想法吗


顺便说一句,此应用程序将在Windows server 2003 32位上运行,以防您认为这将是一个额外的问题

大于
2147483647
的数字无法放入
长数据类型中。您可以实现以下功能:

伪代码:

要查找nBig%a,请执行以下操作:

设d=一次可处理的位数

当val(nBig)>=a
1.tmpStr:=nBig左侧的d位。
2.nBig:=nBig的剩余部分
3.tmpNum:=toInteger(tmpStr)
4.tmpNum:=tmpNum%a
5.tmpStr:=toString(tmpNum)
6.nBig:=tmpStr+nBig

选择d:

d应该满足以下约束


Mod aDim[var],因为[type]
语法不是有效的vbscript。如果您只是丢失了“
As Long
”和“
As String
”部分(来自任何地方,包括函数声明),我认为这段代码在VBScript中都可以工作,但我还没有测试它。@Martha:正确。
AS[type]
部分在VBA中工作,而不是在VBScript中工作。我选择添加它们,以便人们能够理解变量的数据类型。
Function LongMod(strDividend As String, numDivisor As Long) As Long

    Dim d As Long
    Dim strTemp As String
    Dim numTemp As Long

    d = 9 - Len(CStr(numDivisor - 1))

    While CDbl(strDividend) >= numDivisor
        strTemp = Left(strDividend, d)
        numTemp = CLng(strTemp) Mod numDivisor
        strDividend = CStr(numTemp) & Mid(strDividend, d + 1)
    Wend

    LongMod = CLng(strDividend)

End Function

LongMod("1185626240142800",               97) ' 21
LongMod("330542811101000000123456182900", 97) ' 38