我必须创建一个方法来验证一个数字是否遵循某个结构,并且它必须遵循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;
}
答案 0 :(得分:3)
对于非常大的数字,您可以使用BigInteger Class。
您还可以阅读此article以获取有关如何使用它的更多信息。
答案 1 :(得分:1)
您可以使用BigInteger存储大于UInt64的数字。
首先,您必须将System.Numeric
库添加到项目参考中。
并像这样使用:
BigInteger bigInt = 6546546546556565446;