计算API所需要的参数: Hash ID

看着规格书,所需要的参数还蛮多的

https://ithelp.ithome.com.tw/upload/images/20210902/20130033upiQzTW6OZ.png

今天就先用 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天而已,还有一些参数需要进行类似的计算…
希望能快点进入实战!


<<:  Day1 准备好计算纸

>>:  Day02:空间复杂度

[DAY 26] _STM32 看门狗简介_独立看门狗(2)

昨天件绍了看们狗的,今天就来看看如何使用看门狗 独立看门狗一般用来检测和解决由程序引起的故障,比如一...

[Day12] Boxenn 实作 Record Mapper 与 Factory

建议搭配之前的 sequence diagram 一起服用! Dry Initializer 在进到...

Webview问题集(上)-另开分页

缘由: WKWebkit是APP开发中非常常用的元件,但常常会有一些不是很顺利的疑难杂症, 只能一直...

AI ninja project [day 12] 图片分类(2)

这一篇,我想再参考官网的攻略写一篇, 不过内容多增加了一些程序上的处理,以及过拟合(Overfitt...

探讨 C++ and C# 的差异

小弟首次分享学习心得,希望大家会喜欢~ 那我们直接进入主题吧~ 今天要学C++、C#的差异性~ 学习...