1

我的两个门禁控制面板有问题,一个是海康威视,另一个是 ZKTeco CCA-400,这两个面板以不同的方式看到韦根卡,这是一个大问题,因为我无法将卡从 ZKteco 导入到海康威视或相反。

目前我有一张物理标签如下的卡:0002821060 043,03012

海康威视面板看到卡片为:2821060 ZKTeco面板看到卡片为:04303012

我的最终目标是了解为什么会发生这种情况,并在 Hikvision 上构建自定义 Wiegand 规则,以便将卡 ID 转换为两个面板看到的相同。

我搜索并无法弄清楚,所以在我调试这个问题的过程中,我将一个韦根阅读器连接到一个 Arduino UNO 只是为了看到阅读器的线路上,结果只是让问题变得更加混乱:

我尝试了 Wiegand 库: https ://github.com/paulo-raca/YetAnotherArduinoWiegandLibrary 和 https://github.com/monkeyboard/Wiegand-Protocol-Library-for-Arduino

惊喜!第一个库将卡片视为:读取 26 位。0001010110000101111000100100000000 FC = 43, CC = 3012 这正是 ZKTeco 面板所看到的。

第二个库将卡片视为: 读取的卡片:24bits / 2B0BC4 十进制为 2821060,正是海康威视所看到的。

谁能向我解释为什么会这样?通过阅读协议的文档非常简单,不应该真的有两个独立的 ID。

希望我设法以一种好的方式解释了这个问题。

谢谢!

4

3 回答 3

1

我设法解决了这个问题,似乎 ZKTeco 和 Hikvision 以不同的方式处理从 HEX 到 DEC 的转换,这就是卡上有两个不同数字的原因。

所以它是这样的,我们有一张卡片,上面印有以下数字序列:0002821060 043,03012

我们将 2821060 转换为 HEX = 2B0BC4 (这是 ZKTeco 看到的)

对于海康威视:我们将 2B 转换为 DEC = 43 我们将 0BC4 转换为 DEC = 3012

结果十进制数是 43 3012,与访问面板看到的非常接近。现在,我们必须填充它,使其有 8 个数字,如下所示:04303012

如果十进制的第一位<100,我们必须在前面添加一个0。我们还需要填充其余的位,以便第二部分达到 5 位的长度。

结论:海康威视将卡正确转换为韦根26格式(设施代码+卡id),ZKTeco直接将整个卡号转换为十进制而不拆分设施id/卡id。

希望这对必须处理此类访问控制面板的其他人有所帮助。

我写了一段杂乱无章的代码,将 ZK 导出的个人文件转换为海康威视卡格式。

import sys

def convert(dec):
    h = hex(dec)
    h = h[2:]
    #print "HEX {}".format(h)
    first = h[:2]

    first = int(h[:2], 16)
    if first < 100:
        first = "0{}".format(first)
    second = int(h[2:6],16)

    first = str(first)
    second = str(second)
    if len(first)+len(second) == 8:
        final = "{}{}".format(first,second)
    else:
        final = "{}0{}".format(first,second)

    #print "HIK {}".format(final)
    #print "ZK {}".format(int(h,16))
    return str(final)


pid=1
with open("zk.csv") as f:
    lis = [line.split(",") for line in f]
    for i, x in enumerate(lis):
        persid = pid
        if x[1] == "":
            name = "Fara nume"
        else:
            name = "{} {}".format(x[1], x[2])
        cardid = convert(int(x[3]))
        if cardid[:1] == "0":
            cardid = "'{}".format(cardid)
        print "{},NAN,{},1,,,,,{},,".format(pid, name, cardid)
        pid+=1
于 2021-08-30T07:01:06.453 回答
1

听起来您所看到的差异在于两个奇偶校验位。编码到卡中的数字的每一半都有自己的奇偶校验位,一半奇校验,另一半偶校验。除了检测读取错误之外,这两位还允许检测韦根卡的正常使用与上下颠倒。

您可以通过确定两个设备对将卡正面朝后运行的反应来检查这一点。我的猜测是只报告 24 位的那个可能会忽略反向读取,但另一个可能会报告一个不同的数字(位与第一个相反。)

大约 40 年前,我在 Kastle Systems 工作,这可能是 Wiegand 卡用于安全的第一个商业应用。奇偶校验方案类似于 UPC 条码阅读器上使用的校验方案。我看到网上仍然有描述Wiegand Kastle 格式 32 位格式的文档,看起来它可能对您有所帮助。

于 2021-08-28T18:41:42.247 回答
0

这是我在互联网上找到的有关此主题的唯一帖子。我报告了类似的问题。请不要像以前那样删除,因为这可能会对某人有所帮助。

我所做的是使用 Excel 将序列化的 RFID 转换为站点+cardID(海康威视方式):

M88是DEC2HEX(L88)(M88是序列化卡号的Hex)

前 3 位小数

=IF(LEN(HEX2DEC(MID(M88;1;2)))=1;"00"&HEX2DEC(MID(M88;1;2));IF(LEN(HEX2DEC(MID(M88;1;2)))=2;"0"&HEX2DEC(MID(M88;1;2));HEX2DEC(MID(M88;1;2))))

最后 5 位小数

=IF(LEN(HEX2DEC(MID(M88;3;4)))<5;"0"&HEX2DEC(MID(M88;3;4));HEX2DEC(MID(M88;3;4)))

这是我发现的一个很好的计算器,但不适用于数百行 RFID https://btrockford.com/security/card-access-control/proximity-card-calculator/

可能有一个选项可以使用自定义韦根规则来修改海康威视的默认行为(直到现在我还没有成功)。

于 2021-10-05T21:12:08.180 回答