Arduino RFID checksum calculation and key visualization

前端 未结 2 1289
日久生厌
日久生厌 2021-01-21 17:05

I\'m using this RFID module for Arduino Ethernet R3 and I need to retrieve from the Software Serial the card (TAG) ID that is written outside the tag. The module\'s datasheet sa

2条回答
  •  一个人的身影
    2021-01-21 17:11

    Here's a walkthrough of how to calculate the checksum.

    Take your card number (this is just directly quoted from your text)

    I received: 2
    I received: 51
    I received: 67
    I received: 48
    I received: 48
    I received: 67
    I received: 69
    I received: 55
    I received: 53
    I received: 52
    I received: 67
    I received: 67
    I received: 66
    I received: 3
    

    This would give you a number that is equivalent to the following:

    2 51 67 48 48 67 69 55 53 52 67 67 66 3

    The first numer (2) indicates that this is the beginning of a request.

    The last number (3) indicates that this is the end of a request.

    2 51 67 48 48 67 69 55 53 52 67 67 66 3

    For the purposes of calculating the checksum, we are going to remove these two numbers. So your new number is now:

    51 67 48 48 67 69 55 53 52 67 67 66

    The last two numbers that you have are your checksum. The remaining numbers are your card number. So:

    Your card number is:

    51 67 48 48 67 69 55 53 52 67

    And your checksum is:

    67 66

    Next you need to convert your Card Number and your Checksum to ASCII values:

    Your card number is:

    3 C 0 0 C E 7 5 4 C

    And your checksum is:

    C B

    Next, grab each number into pairs:

    Your card number is:

    3C 00 CE 75 4C

    And your checksum is:

    CB

    Then you need to treat each pair as a HEXIDECIMAL value and do an XOR against them. So basically you need to prove the following:

    3C ^ 00 ^ CE ^ 75 ^ 4C == CB

    (3C ^ 00) = 3C

    3C ^ CE ^ 75 ^ 4C == CB

    (3C ^ CE) = F2

    F2 ^ 75 ^ 4C == CB

    (3C ^ CE) = 87

    87 ^ 4C == CB

    (87 ^ 4C) = CB

    CB == CB

    Because CB == CB, this is a valid transaction.

    No doubt someone else can come up with a better approach than this, but there should be enough pseudo code here for you to write it yourself.

提交回复
热议问题