C#.NET中的大数字

时间:2015-06-11 19:11:34

标签: c# php

我必须创建一个方法来验证一个数字是否遵循某个结构,并且它必须遵循PHP中实现的现有模式,但是我在使用C#.NET时遇到了一些问题。当数字太长时我得到一个System.OverflowException,我正在使用 ulong ,看看:

    /// <summary>
    /// Gera um dígito verificador para um código
    /// </summary>
    /// <param name="code">Código</param>
    /// <returns>Digito verificador</returns>
    public static ulong GenerateTrustID(UInt64 code)
    {
        UInt64 intcode = 1;
        UInt64 endcode = 0;

        foreach (UInt64 number in code.ToString().ToCharArray().Select(Convert.ToInt64).ToArray())
        {
            UInt64 newcode = (number * code * intcode);

            char[] chrcode = newcode.ToString().ToCharArray();
            Array.Reverse(chrcode);
            intcode = UInt64.Parse((new string(chrcode)));
        }

        if (intcode.ToString().Length < 2)
        { 
            intcode = 04051995;
            intcode = intcode * 88;
        }

        endcode = UInt64.Parse(intcode.ToString().GetLast(2));

        return endcode;
    }

我必须重现下面的代码:

/**
 * @brief   Gera uma ID de verificação para um código em um esquema privado.
 * @param   int $code Código para o qual será gerado o ID de verificação
 * @return  int
 */
public function generateTrustID($code){
    $intcode = 1;
    $endcode = null;
    $numbers = array_map('intval', str_split($code));

    foreach($numbers as $number){
        $intcode = (int)strrev($number * $code * $intcode);
    }

    if(strlen($intcode) < 2){
        $intcode = 04051995;
        $intcode = $intcode * 88;
    }

    $endcode = substr($intcode, 0, 2);

    return $endcode;
}

2 个答案:

答案 0 :(得分:3)

对于非常大的数字,您可以使用BigInteger Class

您还可以阅读此article以获取有关如何使用它的更多信息。

答案 1 :(得分:1)

您可以使用BigInteger存储大于UInt64的数字。

首先,您必须将System.Numeric库添加到项目参考中。

并像这样使用:

BigInteger bigInt = 6546546546556565446;