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;
}
对于非常大的数字,您可以使用 BigInteger 类。
您还可以阅读本文以获取有关如何使用它的更多信息。
您可以使用 BigInteger 存储大于 UInt64 的数字。
对于这项工作,首先必须将库System.Numeric
添加到项目引用中。
并像这样使用它:
BigInteger bigInt = 6546546546556565446;