VB.net随机引脚生成器程序溢出

VB.net随机引脚生成器程序溢出,vb.net,random,Vb.net,Random,我正在做一个随机引脚生成器程序,运行它时发现一个神秘的错误 Shared Function CreatePIN() As Integer Dim PIN As String = "" ' Create the Random ID: Dim possible As String = "0123456789" For i As Integer = 0 To 9 PIN += possible.Chars(Math.Floor(Rnd() * possi

我正在做一个随机引脚生成器程序,运行它时发现一个神秘的错误

Shared Function CreatePIN() As Integer
    Dim PIN As String = ""
    ' Create the Random ID:
    Dim possible As String = "0123456789"
    For i As Integer = 0 To 9
        PIN += possible.Chars(Math.Floor(Rnd() * possible.Length) Mod possible.Length)
    Next
    Return Convert.ToInt32(PIN)
End Function

我得到的错误是溢出!我正在创建的int太大或太小,无法成为int。这是如何发生的?这个程序不可能产生这么大的整数。。。虽然显然是这样

int最大值为
2147483647

您的代码可以生成
99999999

使用长密码或更改密码,以确保不会在
2147483647


和一个音符;始终打开
option explicit on
option strict on

是否尝试转换。ToInt64(PIN)?在使用64位intA时仍会产生溢出。64位int的大小足以容纳此函数可以生成的最大数(999999999999),但在这种情况下,还需要更新函数的返回类型以返回
Int64
。更简单的修复方法是返回字符串。引脚很少是实际的数字类型,在这种情况下,如果前导数字恰好为“0”,则前导数字偶尔会丢失。感谢您对这个问题的深入了解。事实上,在考虑了一个简单的32位整数作为PIN的可行性之后,我最终通过将我正在创建的PIN转换为字符串来解决这个问题!!!现在我可以有一个巨大的字母数字PIN,加上每天的服务器请求限制,几乎不可能进行暴力猜测。
Function CreatePIN() As Long
    Dim PIN As String = ""
    ' Create the Random ID:
    Dim possible As String = "0123456789"
    For i As Integer = 0 To 9
        PIN += possible.Chars(CInt(Math.Floor(Rnd() * possible.Length) Mod possible.Length))
    Next
    Return Convert.ToInt64(PIN)
End Function