C#.NET 中的大数字

本文关键字:数字 NET | 更新日期: 2023-09-27 17:55:20

我必须创建一个方法来验证数字是否遵循某种结构,并且它必须遵循在 PHP 中实现的现有模式,但我在 C#.NET 中做精简时遇到了一些麻烦。当数字太长时,我得到了一个系统.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;
}

C#.NET 中的大数字

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

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

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

对于这项工作,首先必须将库System.Numeric添加到项目引用中。

并像这样使用它:

BigInteger bigInt = 6546546546556565446;