我已经搜索了Stackoverflow,不幸的是什么都没有出现。我正在使用FIX协议,我需要生成一个模256校验和,如http://fixwiki.fixprotocol.org/fixwiki/CheckSum所述。
$count = strlen($message);
$count = $count % 256;
$checksum = 256 - $count;
if(strlen($checksum) == 1) {
$checksum = '00' . $checksum;
}
if(strlen($checksum) == 2) {
$checksum = '0' . $checksum;
}
使用FIX字符串:
8=FIX.4.2|9=42|35=0|49=A|56=B|三十四=十二|52=20100304-07:59:30
它应返回:
8=FIX.4.2|9=42|35=0|49=A|56=B|三十四=十二|52=20100304-07:59:30|10=185|
但是我的脚本返回:
8=FIX.4.2|9=42|35=0|49=A|56=B|三十四=十二|52=20100304-07:59:30|10=199|
如果有人能给我指出正确的方向,我将不胜感激!
3条答案
按热度按时间zf9nrax11#
根据http://fixwiki.fixprotocol.org/fixwiki/CheckSum,校验和不仅仅是消息的长度模256。
它是每个字符(作为ascii值)模256的和。
印刷品
或者更接近文档中的示例函数
shstlldc2#
你的字符串可能有多个字节字符。试试
mb_strlen
。dojqjjoe3#
此函数适用于十六进制输入:
}