2012-11-22 27 views
5

Bazı banka hesap numaralarını kontrol etmek için bir hesap numarasında bir modulo 97 yapmak istiyorum. Ama bir çok hesap numarası UInt64'e girmek büyük.24 basamaklı tamsayı

24 basamaklı bir tam sayı üzerinde nasıl bir zıtlık yapabilirim?

sayesinde

Örnek kod (o dönüştürmek olamaz):

(Convert.ToUInt64("756842356987456214536254") % 97 == 1); 
+1

Bir yan not: muhtemelen kötü banka hesap numarasını sayı olarak saklamak için bir fikir ... Gerçekten matematiksel bir sayı değil, daha çok araba plakası plaka kimliği gibi. En azından dünyanın bazı yerlerinde, banka hesabında harfler olabilir ve/veya ortada tire ve/veya çıkarılabilir sıfırlar olabilir (11-22, 000011-0000000022 ile aynıdır). – hyde

+3

Numara olarak kullanmalıyım. Çünkü IBAN standardı bir banka hesabının geçerliliğini kontrol etmelidir. Bunu yapmak için, hesap numarasının harflerini dönüştürmeli ve daha sonra matematiksel bir muhalefet gerçekleştirmeliyiz. İzle: # http://en.wikipedia.org/wiki/International_Bank_Account_Number Validating_the_IBAN –

+0

Ah, bu bilmek için iyi bir trivia. – hyde

cevap

9

Tek yön System.Numeric 'ın BigInteger kullanmak olacaktır:

BigInteger bi = BigInteger.Parse("756842356987456214536254"); 
1

Teşekkür,

Bu bir iş. numaraları En 28 basamaklı varsa

Org.BouncyCastle.Math.BigInteger bi = new BigInteger("756842356987456214536254"); 

(Convert.ToInt32(bi.Mod(new BigInteger("97")).ToString()) == 1); 
+0

BigInt ile görmüyor musunuz? Benim için uygun. Org.BouncyCastle.Math.BigInteger –

+1

kullanıyorum Yeni bir yanıt göndererek bir gönderiye yorum yapamazsınız. Lütfen ilgili yayına bir yorum ekleyin. Cevaplar kronolojik olarak gösterilmiyor, bu yüzden hangi cevaplara cevap verdiğiniz bellidir. – Tormod

0

, ayrıca decimal kullanabilirsiniz. Bu, BigInteger'dan daha kullanışlı olabilir.

+0

Evet, ancak bazı hesap numaralarında 28'den fazla basamak var. Yani, BigInteger kullanacağım çünkü en fazla 38 haneli olabilir. –

0

giriş o yüzden bu örnekte olduğu gibi BigInteger constructor geçirilebilir bir bayt dizisi almak dize almak ve Encoding.GetBytes method kullanımı daha kolay olabilir metin ise:

var enc = new System.Text.UTF8Encoding(); 
var bi = new BigInteger(enc.GetBytes("756842356987456214536254")); 
var result = (bi % 97).ToString(); 
+0

Bu benim için hiçbir anlam ifade etmiyor: 'BigInteger (byte [])', ikili gösterimde bir sayı bekliyor, UTF-8 karakter dizisi değil! –