AlexH, я так понял алгоритм расчета CRC-XMODEM
полином 8408
Вот такой у меня код получился. .NET
PHP код:
string inputStr = "84103305181301086B00410540A611011D00003A004F72B0AC82A1016B008242E428214380802309";
StringBuilder sb = new StringBuilder();
sb.Append(inputStr);
// Выравнивание строки
for (int i = 0; i <= 0x200; i++)
{
if (sb.Length < i)
sb.Append(" ");
}
inputStr = sb.ToString();
byte[] str = Encoding.ASCII.GetBytes(inputStr);
int result = 65535;
int length = str.Length;
int CurrentByte = 0;
int StepByte = 0;
for (int i = 0; i < length; i++)
{
CurrentByte = (int)str[i];
result ^= CurrentByte;
StepByte = result;
for (int j = 0; j < 8; j++)
{
if ((StepByte & 1) == 1)
{
result = (StepByte >> 1) & 0xFFFF;
result ^= 0x8408;
StepByte = result;
}
else
{
StepByte = (StepByte >> 1) & 0xFFFF;
result = StepByte;
}
}
}
ushort res = ((ushort)~(short)result);
Console.WriteLine("Result : {0}", res.ToString("X"));