来自非常大的int C#的模数

Mad*_*Boy 1 c# modulo c#-4.0

我遇到了来自int的modulo的问题,它有31个字符.这似乎对错误进行
Int64 convertedNumber = Int64.Parse(mergedNumber);Value was either too large or too small for an Int64. (Overflow Exception).如何修复它以便modulo不会出错?

class GeneratorRachunkow {
    private static string numerRozliczeniowyBanku = "11111155"; // 8 chars
    private static string identyfikatorNumeruRachunku = "7244"; // 4 chars
    private static string stalaBanku = "562100"; // 6 chars

    public static string generator(string pesel, string varKlientID) {      
        string peselSubstring = pesel.Substring(pesel.Length - 5); // 5 chars (from the end of the string);
        string toAttach = varKlientID + peselSubstring;
        string indywidualnyNumerRachunku = string.Format("{0}", toAttach.ToString().PadLeft(13, '0')); // merging pesel with klient id and adding 0 to the begining to match 13 chars
        string mergedNumber = numerRozliczeniowyBanku + identyfikatorNumeruRachunku + indywidualnyNumerRachunku + stalaBanku; // merging everything -> 31 chars
        Int64 convertedNumber = Int64.Parse(mergedNumber);
        Int64 modulo = MathMod(convertedNumber, 97);

        Int64 wynik = 98 - modulo;
        string wynikString = string.Format("{0}", wynik.ToString().PadLeft(2, '0')); // must be 2 chars
        indywidualnyNumerRachunku = wynikString + numerRozliczeniowyBanku + identyfikatorNumeruRachunku + indywidualnyNumerRachunku; 

        return indywidualnyNumerRachunku;
    }
    private static Int64 MathMod(Int64 a, Int64 b) {
        return (Math.Abs(a * b) + a) % b;
    }

}
Run Code Online (Sandbox Code Playgroud)

Fre*_*örk 5

Int64is 的最大值9223372036854775807(打印时为19个字符).您可能希望使用BigInteger(在.NET 4中引入):

public static string generator(string pesel, string varKlientID) { 
    // I have cut some code here to keep it short
    BigInteger convertedNumber;
    if (BigInteger.TryParse(mergedNumber , out convertedNumber))
    {
        BigInteger modulo = convertedNumber % 97;           
        // The rest of the method goes here...
    }
    else
    {
        // string could not be parsed to BigInteger; handle gracefully
    }

}

private static BigInteger MathMod(BigInteger a, BigInteger b)
{
    return (BigInteger.Abs(a * b) + a) % b;
}
Run Code Online (Sandbox Code Playgroud)