我现在正在学习使用C#,而我只是想到了随机的东西,所以基本上这是一个“信用卡生成器”,它显然不会生成真正的卡号,只是一个随机的16位数字,与CVV和Exp日期。
到目前为止,我可以打印出Exp日期,但至于信用卡号,我收到的错误是 -
“无法从long转换为int”,也是一条说明最佳重载方法的消息。
我也遇到了日期功能的一些问题,我可以让它生成6个数字,例如,日期和年份,但如果我尝试添加另外2个数字,它仍会吐出6个。
这是我的代码,抱歉,如果这没有意义,就像我说的,我是新手:)
提前感谢您的帮助。
private void button1_Click(object sender, EventArgs e)
{
Random rnd = new Random();
double cardNumber = rnd.Next(4572000000000000, 4999999999999999);
int cvv = rnd.Next(001, 999);
int expDay = rnd.Next(1, 30);
int expMonth = rnd.Next(1, 12);
int expYear = rnd.Next(2011, 2015);
textBox1.Text = cardNumber.ToString();
textBox2.Text = cvv.ToString();
textBox3.Text = expDay.ToString() + expMonth.ToString() + expYear.ToString();
}
我会再次说明这一点,为了明确这一点,这绝不会产生真正的信用卡号码,它们只是随机生成的数字......
答案 0 :(得分:2)
Random.Next
需要int
。由于4999999999999999
和4572000000000000
大于int.MaxValue
(2147483647
)但小于long.MaxValue
(9223372036854775807
),因此会自动将其视为您需要的一个long
(就好像你最后放了一个L
),但是不能将其转回-2147483648
和{{1}之间的数字}。如果可能的话,这对你没用多大。
您可以生成一系列较短的数字并将它们组合在一起。
为了获得更大的逼真度,您可以生成比您的信用卡号码少一个号码(通常为16,因此您生成15个号码,但使用了14位到19位的卡号码)在过去)然后做一个反向Luhn来产生最终的数字,所以你有一个通过Luhn检查的有效信用卡号。 (这甚至具有实际用途;在调试版本中,任何真实卡发行商使用的范围之外的Luhn有效数字特殊情况可能很有用,这样您就可以获得大部分测试编号。代码视为有效数字,但最后一步知道不要尝试购买任何东西。
答案 1 :(得分:0)
正如其他人所说的那样,问题在于int并不适用于那些大的数字。正如你所说,你只是玩游戏而不是创建真实的卡号,那么创建一个循环来创建一个数字,然后调用16次。每次调用该函数时,都可以将结果附加到字符串中并保存该值以供日后使用。
此外,我认为还没有人指出,但你使用double
作为卡号的类型。这是一种不精确的数据类型,在这里你需要一个精确的数字是不合适的。你想要的值可能是1234567891234567,但实际存储在内存中的是123456789123456.0000000000001。
Random rnd = new Random();
string cardNumber = string.Empty;
for(int i = 0; i < 16; i++)
{
cardNumber += rnd.Next(0,9).ToString();
}
答案 2 :(得分:0)
这是我现在使用的代码,但我想看看上面建议的循环,它似乎是一个更清晰的解决方案。
Random rnd = new Random();
int cardNumber1 = rnd.Next(4572, 4999);
int cardNumber2 = rnd.Next(1000, 9999);
int cardNumber3 = rnd.Next(1000, 9999);
int cardNumber4 = rnd.Next(1000, 9999);
int cvv = rnd.Next(100, 999);
int expDay = rnd.Next(1, 30);
int expMonth = rnd.Next(1, 12);
int expYear = rnd.Next(2015, 2019);
textBox1.Text = cardNumber1.ToString() + cardNumber2.ToString() + cardNumber3.ToString() + cardNumber4.ToString();
textBox2.Text = cvv.ToString();
textBox3.Text = expDay.ToString() + "/" + expMonth.ToString() + "/" + expYear.ToString();