看著規格書,所需要的參數還蠻多的
今天就先用 Python 來求算 Hash ID!
依據官方的說明文件:
Hash ID是透過位元運算(XOR)將四組Hash計算產出的,將A1/A2以XOR運算所得的字串,再與B1/B2以XOR運算出來的字串,二個相加後將英文轉換為大寫,為長度為32的字串(例: 17D8E6558DC60E702A6B57E1B9B7060D)。
在 Python 中實作起來如下:
def strToHexByte(s):
return int(s,base=16)
A1 = "4D9709D699CA40EE"
A2 = "5A4FEF83140C4E9E"
B1 = "BC74301945134CB4"
B2 = "961F67F8FCA44AB9"
# 透過 ^ 進行 XOR 計算
XOR1 = strToHexByte(A1) ^ strToHexByte(A2)
XOR2 = strToHexByte(B1) ^ strToHexByte(B2)
# 將 XOR 的結果(數字) 轉成 hex
hex_XOR1 = hex(XOR1)
hex_XOR2 = hex(XOR2)
# 將字串合併後,再大寫
hash_id = ( hex_XOR1 + hex_XOR2 ).upper()
結果是:
"0X17D8E6558DC60E700X2A6B57E1B9B7060D"
而官方示例中:
"17D8E6558DC60E702A6B57E1B9B7060D"
可以發現多出了"0X"的前置字元,上網查了一下,這是 python 的特性;
官方的 PHP 示例中是不會有這個狀況發生。
所以此處要將上方的程式碼最後一段調整為
# 透過 Python 的 字串[開始位置:結束位置],
# 因為我們不要前面2個符號,所以用 [2:]的方式來截斷文字
hash_id = ( hex_XOR1[2:] + hex_XOR2[2:] ).upper()
這樣得到的結果就會與官方示範完全相同。
天啊! 第2天而已,還有一些參數需要進行類似的計算…
希望能快點進入實戰!