in sdk/src/Core/Internal/Entities/TraceId.cs [73:132]
public static bool IsIdValid(string traceId)
{
// Is the input valid?
if (string.IsNullOrWhiteSpace(traceId))
{
return false;
}
// Is the total length valid?
if (traceId.Length != TotalLength)
{
return false;
}
string[] elements = traceId.Split(Delimiter);
// Is the number of elements valid?
if (elements.Length != ElementsCount)
{
return false;
}
// Is the version a valid integer?
int idVersion;
if (!int.TryParse(elements[0], out idVersion))
{
return false;
}
// Is the version supportted?
if (Version != idVersion)
{
return false;
}
var idEpoch = elements[1];
var idRand = elements[2];
// Is the size of epoch and random number valid?
if (idEpoch.Length != EpochHexDigits || idRand.Length != RandomNumberHexDigits)
{
return false;
}
// Is the epoch a valid 32bit hex number?
int epoch;
if (!int.TryParse(idEpoch, NumberStyles.HexNumber, null, out epoch))
{
return false;
}
// Is the random number a valid hex number?
BigInteger rand = BigInteger.Zero;
if (!BigInteger.TryParse(idRand, NumberStyles.HexNumber, null, out rand))
{
return false;
}
return true;
}