# CRC-8 checksum function

**URL:** <https://discourse.nodered.org/t/crc-8-checksum-function/73087>\
**Category:** General\
**Created:** [3 January 2023 03:09 UTC](https://discourse.nodered.org/t/crc-8-checksum-function/73087 "2023-01-03T03:09:33Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![Angin](https://avatars.discourse-cdn.com/v4/letter/a/eb8c5e/32.png) [@Angin](https://discourse.nodered.org/u/Angin)\
**Post date:** [3 January 2023 03:09 UTC](https://discourse.nodered.org/t/crc-8-checksum-function/73087/1 "2023-01-03T03:09:33Z")

</div>

Hello everyone, I need a function that can calculate CRC-8, but this is difficult for me, the C algorithm reference is as follows:

```auto
unsigned char CRC8_Check(unsigned char *ptr,unsigned char len)
{ 
    unsigned char crc; 
    unsigned char i; 
      unsigned char j;
    crc = 0;
      if(len>2)
     {
          j=len-2; 
       while(j--)
       { 
          crc ^= *ptr++;
          for(i = 0;i < 8;i++)
          {
             if(crc & 0x80)
             { 
                  crc = (crc << 1) ^ 0x07;
             }
             else crc <<= 1;
          }
       }
    }
    if(ptr[len-2]==crc) 
            return 1; 
    else
            return 0;
}

```

Can anyone help please? Any help would be appreciated!

---

<div class="post-metadata">

**Author:** ![jackhax1](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/jackhax1/32/67642_2.png) [@jackhax1](https://discourse.nodered.org/u/jackhax1)\
**Post date:** [3 January 2023 06:40 UTC](https://discourse.nodered.org/t/crc-8-checksum-function/73087/2 "2023-01-03T06:40:13Z")

</div>

You can try to search google "Javascript crc-8 function" then implement it using the function node

---

<div class="post-metadata">

**Author:** ![Steve-Mcl](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/steve-mcl/32/4826_2.png) [@Steve-Mcl](https://discourse.nodered.org/u/Steve-Mcl)\
**Post date:** [3 January 2023 07:16 UTC](https://discourse.nodered.org/t/crc-8-checksum-function/73087/3 "2023-01-03T07:16:42Z")

</div>

Also search this forum. E.g. [Help on CRC-8 function - #9 by Steve-Mcl](https://discourse.nodered.org/t/help-on-crc-8-function/34354/9)

---

<div class="post-metadata">

**Author:** ![Angin](https://avatars.discourse-cdn.com/v4/letter/a/eb8c5e/32.png) [@Angin](https://discourse.nodered.org/u/Angin)\
**Post date:** [3 January 2023 09:05 UTC](https://discourse.nodered.org/t/crc-8-checksum-function/73087/4 "2023-01-03T09:05:39Z")

</div>

Thank you very much for your reply, I have tested your node, but it is not the CRC8 checksum result I want, that's why I am posting for help. For example, I want to calculate the string: `7e79030f010002020000000001` with CRC8 checksum result: `0x91`, but your node calculates it as: `0xbe`, now I don't know what's wrong.

 ![Clipboard 1](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/c/e/ce41aa8d5716944eb1d7eae55ab5a3fb122251f5.jpeg)  
 ![Clipboard 2](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/b/c/bc9cf786c880a170371feb655db143e658edc36e.jpeg)

---

<div class="post-metadata">

**Author:** ![Steve-Mcl](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/steve-mcl/32/4826_2.png) [@Steve-Mcl](https://discourse.nodered.org/u/Steve-Mcl)\
**Post date:** [3 January 2023 10:45 UTC](https://discourse.nodered.org/t/crc-8-checksum-function/73087/5 "2023-01-03T10:45:13Z")

</div>

If you are using later version of node-red, you can use the easy-crc package.

If not, let me know and I'll give you a pure node-red function node with lookup table.

#### using easy-crc in a function...

 ![image](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/9/3/93d8fddd0e72fb1d6e873583eb94c9e401821535.png)

```auto
[{"id":"e2beeb574d982801","type":"inject","z":"3b62e67b4dfcce5d","name":"7e79030f010002020000000001","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"7e79030f010002020000000001","payloadType":"str","x":2250,"y":100,"wires":[["4bf21b40a1445e15"]]},{"id":"4bf21b40a1445e15","type":"function","z":"3b62e67b4dfcce5d","name":"crc-8 (easy-crc)","func":"//See https://www.npmjs.com/package/easy-crc?activeTab=readme for list of supported algorithms\nconst { crc8 } = easyCrc;\nconst data = Buffer.from(msg.payload, 'hex');\nmsg.payload = crc8('CRC-8', data);\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[{"var":"easyCrc","module":"easy-crc"}],"x":2160,"y":160,"wires":[["25cd665db5eaa0d9"]]},{"id":"25cd665db5eaa0d9","type":"debug","z":"3b62e67b4dfcce5d","name":"","active":true,"tosidebar":true,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":2410,"y":160,"wires":[]}]

```

---

<div class="post-metadata">

**Author:** ![Angin](https://avatars.discourse-cdn.com/v4/letter/a/eb8c5e/32.png) [@Angin](https://discourse.nodered.org/u/Angin)\
**Post date:** [3 January 2023 13:15 UTC](https://discourse.nodered.org/t/crc-8-checksum-function/73087/6 "2023-01-03T13:15:31Z")

</div>

steve, thanks a lot for your help!  
Could you please give me a node-red function node, because I won't install npm packages outside of node-red. 😅

---

<div class="post-metadata">

**Author:** ![Steve-Mcl](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/steve-mcl/32/4826_2.png) [@Steve-Mcl](https://discourse.nodered.org/u/Steve-Mcl)\
**Post date:** [3 January 2023 13:30 UTC](https://discourse.nodered.org/t/crc-8-checksum-function/73087/7 "2023-01-03T13:30:24Z")

</div>

> [@Angin](#):
>
> Could you please give me a node-red function node

This is a pure node-red function (apart from the import easy-css)

> [@Angin](#):
>
> because I won't install npm packages outside of node-red.

This solution does use an npm package (easy-crc) but you dont have to **manually** install it (node-red auto installs it)

Is there a specific reason you do NOT want this? Does the node-red not have an internet connection? does your company not permit npm packages?

---

<div class="post-metadata">

**Author:** ![Angin](https://avatars.discourse-cdn.com/v4/letter/a/eb8c5e/32.png) [@Angin](https://discourse.nodered.org/u/Angin)\
**Post date:** [3 January 2023 14:14 UTC](https://discourse.nodered.org/t/crc-8-checksum-function/73087/8 "2023-01-03T14:14:57Z")

</div>

Yes, I don't have access to install npm packages.

![Clipboard 3](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/e/5/e57c13fe4ffc5823203125ed6f6485657244665e.jpeg)

The above node is not working for me.

![Clipboard 4](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/4/8/48ef2ae3b317f132840ca705f8b8dd4ab9159f17.jpeg)

---

<div class="post-metadata">

**Author:** ![Steve-Mcl](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/steve-mcl/32/4826_2.png) [@Steve-Mcl](https://discourse.nodered.org/u/Steve-Mcl)\
**Post date:** [3 January 2023 14:17 UTC](https://discourse.nodered.org/t/crc-8-checksum-function/73087/9 "2023-01-03T14:17:32Z")

</div>

Here is a function version...

```auto
const CRC8_LOOKUP = [
    0x00, 0x07, 0x0e, 0x09, 0x1c, 0x1b, 0x12, 0x15, 0x38, 0x3f, 0x36, 0x31, 0x24, 0x23, 0x2a, 0x2d,
    0x70, 0x77, 0x7e, 0x79, 0x6c, 0x6b, 0x62, 0x65, 0x48, 0x4f, 0x46, 0x41, 0x54, 0x53, 0x5a, 0x5d,
    0xe0, 0xe7, 0xee, 0xe9, 0xfc, 0xfb, 0xf2, 0xf5, 0xd8, 0xdf, 0xd6, 0xd1, 0xc4, 0xc3, 0xca, 0xcd,
    0x90, 0x97, 0x9e, 0x99, 0x8c, 0x8b, 0x82, 0x85, 0xa8, 0xaf, 0xa6, 0xa1, 0xb4, 0xb3, 0xba, 0xbd,
    0xc7, 0xc0, 0xc9, 0xce, 0xdb, 0xdc, 0xd5, 0xd2, 0xff, 0xf8, 0xf1, 0xf6, 0xe3, 0xe4, 0xed, 0xea,
    0xb7, 0xb0, 0xb9, 0xbe, 0xab, 0xac, 0xa5, 0xa2, 0x8f, 0x88, 0x81, 0x86, 0x93, 0x94, 0x9d, 0x9a,
    0x27, 0x20, 0x29, 0x2e, 0x3b, 0x3c, 0x35, 0x32, 0x1f, 0x18, 0x11, 0x16, 0x03, 0x04, 0x0d, 0x0a,
    0x57, 0x50, 0x59, 0x5e, 0x4b, 0x4c, 0x45, 0x42, 0x6f, 0x68, 0x61, 0x66, 0x73, 0x74, 0x7d, 0x7a,
    0x89, 0x8e, 0x87, 0x80, 0x95, 0x92, 0x9b, 0x9c, 0xb1, 0xb6, 0xbf, 0xb8, 0xad, 0xaa, 0xa3, 0xa4,
    0xf9, 0xfe, 0xf7, 0xf0, 0xe5, 0xe2, 0xeb, 0xec, 0xc1, 0xc6, 0xcf, 0xc8, 0xdd, 0xda, 0xd3, 0xd4,
    0x69, 0x6e, 0x67, 0x60, 0x75, 0x72, 0x7b, 0x7c, 0x51, 0x56, 0x5f, 0x58, 0x4d, 0x4a, 0x43, 0x44,
    0x19, 0x1e, 0x17, 0x10, 0x05, 0x02, 0x0b, 0x0c, 0x21, 0x26, 0x2f, 0x28, 0x3d, 0x3a, 0x33, 0x34,
    0x4e, 0x49, 0x40, 0x47, 0x52, 0x55, 0x5c, 0x5b, 0x76, 0x71, 0x78, 0x7f, 0x6a, 0x6d, 0x64, 0x63,
    0x3e, 0x39, 0x30, 0x37, 0x22, 0x25, 0x2c, 0x2b, 0x06, 0x01, 0x08, 0x0f, 0x1a, 0x1d, 0x14, 0x13,
    0xae, 0xa9, 0xa0, 0xa7, 0xb2, 0xb5, 0xbc, 0xbb, 0x96, 0x91, 0x98, 0x9f, 0x8a, 0x8d, 0x84, 0x83,
    0xde, 0xd9, 0xd0, 0xd7, 0xc2, 0xc5, 0xcc, 0xcb, 0xe6, 0xe1, 0xe8, 0xef, 0xfa, 0xfd, 0xf4, 0xf3,
]

const crc8 = (current, previous = 0) => {
    let crc = ~~previous;
    for (let index = 0; index < current.length; index++) {
        crc = CRC8_LOOKUP[(crc ^ current[index]) & 0xff] & 0xff;
    }
    return crc;
}
const inputData = Buffer.from(msg.payload, 'hex')

msg.payload = crc8(inputData)

return msg

```

Proof...  
 ![image](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/6/3/63433abb5bcc47612b9b2d3d78c76afeb9c31e5a.png)

---

<div class="post-metadata">

**Author:** ![Angin](https://avatars.discourse-cdn.com/v4/letter/a/eb8c5e/32.png) [@Angin](https://discourse.nodered.org/u/Angin)\
**Post date:** [3 January 2023 14:28 UTC](https://discourse.nodered.org/t/crc-8-checksum-function/73087/10 "2023-01-03T14:28:28Z")

</div>

steve, thank you so, so much! Solved a big problem for me! This forum is so honored to have you!

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/1X/d073cd938eafa2e558d7c2cd59003b3ef4963033.png) [@system](https://discourse.nodered.org/u/system)\
**Post date:** [17 January 2023 14:28 UTC](https://discourse.nodered.org/t/crc-8-checksum-function/73087/11 "2023-01-17T14:28:29Z")

</div>

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.
