Last active
August 11, 2023 13:37
-
-
Save manuel-rubio/0dbba0089fb28eca9ad73ba668cd8f05 to your computer and use it in GitHub Desktop.
crc16.erl
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
-module(crc16). | |
-export([calculate/1]). | |
calculate(Data) -> | |
calculate(Data, 0). | |
calculate([H | T], CRC) when H >= 0 andalso H =< 255 -> | |
calculate(T, (CRC bsl 8) bxor crc16tab(((CRC bsr 8) bxor H) band 16#00FF)); | |
calculate([], CRC) -> | |
CRC. | |
crc16tab(0) -> 16#0000; | |
crc16tab(1) -> 16#1021; | |
crc16tab(2) -> 16#2042; | |
crc16tab(3) -> 16#3063; | |
crc16tab(4) -> 16#4084; | |
crc16tab(5) -> 16#50a5; | |
crc16tab(6) -> 16#60c6; | |
crc16tab(7) -> 16#70e7; | |
crc16tab(8) -> 16#8108; | |
crc16tab(9) -> 16#9129; | |
crc16tab(10) -> 16#a14a; | |
crc16tab(11) -> 16#b16b; | |
crc16tab(12) -> 16#c18c; | |
crc16tab(13) -> 16#d1ad; | |
crc16tab(14) -> 16#e1ce; | |
crc16tab(15) -> 16#f1ef; | |
crc16tab(16) -> 16#1231; | |
crc16tab(17) -> 16#0210; | |
crc16tab(18) -> 16#3273; | |
crc16tab(19) -> 16#2252; | |
crc16tab(20) -> 16#52b5; | |
crc16tab(21) -> 16#4294; | |
crc16tab(22) -> 16#72f7; | |
crc16tab(23) -> 16#62d6; | |
crc16tab(24) -> 16#9339; | |
crc16tab(25) -> 16#8318; | |
crc16tab(26) -> 16#b37b; | |
crc16tab(27) -> 16#a35a; | |
crc16tab(28) -> 16#d3bd; | |
crc16tab(29) -> 16#c39c; | |
crc16tab(30) -> 16#f3ff; | |
crc16tab(31) -> 16#e3de; | |
crc16tab(32) -> 16#2462; | |
crc16tab(33) -> 16#3443; | |
crc16tab(34) -> 16#0420; | |
crc16tab(35) -> 16#1401; | |
crc16tab(36) -> 16#64e6; | |
crc16tab(37) -> 16#74c7; | |
crc16tab(38) -> 16#44a4; | |
crc16tab(39) -> 16#5485; | |
crc16tab(40) -> 16#a56a; | |
crc16tab(41) -> 16#b54b; | |
crc16tab(42) -> 16#8528; | |
crc16tab(43) -> 16#9509; | |
crc16tab(44) -> 16#e5ee; | |
crc16tab(45) -> 16#f5cf; | |
crc16tab(46) -> 16#c5ac; | |
crc16tab(47) -> 16#d58d; | |
crc16tab(48) -> 16#3653; | |
crc16tab(49) -> 16#2672; | |
crc16tab(50) -> 16#1611; | |
crc16tab(51) -> 16#0630; | |
crc16tab(52) -> 16#76d7; | |
crc16tab(53) -> 16#66f6; | |
crc16tab(54) -> 16#5695; | |
crc16tab(55) -> 16#46b4; | |
crc16tab(56) -> 16#b75b; | |
crc16tab(57) -> 16#a77a; | |
crc16tab(58) -> 16#9719; | |
crc16tab(59) -> 16#8738; | |
crc16tab(60) -> 16#f7df; | |
crc16tab(61) -> 16#e7fe; | |
crc16tab(62) -> 16#d79d; | |
crc16tab(63) -> 16#c7bc; | |
crc16tab(64) -> 16#48c4; | |
crc16tab(65) -> 16#58e5; | |
crc16tab(66) -> 16#6886; | |
crc16tab(67) -> 16#78a7; | |
crc16tab(68) -> 16#0840; | |
crc16tab(69) -> 16#1861; | |
crc16tab(70) -> 16#2802; | |
crc16tab(71) -> 16#3823; | |
crc16tab(72) -> 16#c9cc; | |
crc16tab(73) -> 16#d9ed; | |
crc16tab(74) -> 16#e98e; | |
crc16tab(75) -> 16#f9af; | |
crc16tab(76) -> 16#8948; | |
crc16tab(77) -> 16#9969; | |
crc16tab(78) -> 16#a90a; | |
crc16tab(79) -> 16#b92b; | |
crc16tab(80) -> 16#5af5; | |
crc16tab(81) -> 16#4ad4; | |
crc16tab(82) -> 16#7ab7; | |
crc16tab(83) -> 16#6a96; | |
crc16tab(84) -> 16#1a71; | |
crc16tab(85) -> 16#0a50; | |
crc16tab(86) -> 16#3a33; | |
crc16tab(87) -> 16#2a12; | |
crc16tab(88) -> 16#dbfd; | |
crc16tab(89) -> 16#cbdc; | |
crc16tab(90) -> 16#fbbf; | |
crc16tab(91) -> 16#eb9e; | |
crc16tab(92) -> 16#9b79; | |
crc16tab(93) -> 16#8b58; | |
crc16tab(94) -> 16#bb3b; | |
crc16tab(95) -> 16#ab1a; | |
crc16tab(96) -> 16#6ca6; | |
crc16tab(97) -> 16#7c87; | |
crc16tab(98) -> 16#4ce4; | |
crc16tab(99) -> 16#5cc5; | |
crc16tab(100) -> 16#2c22; | |
crc16tab(101) -> 16#3c03; | |
crc16tab(102) -> 16#0c60; | |
crc16tab(103) -> 16#1c41; | |
crc16tab(104) -> 16#edae; | |
crc16tab(105) -> 16#fd8f; | |
crc16tab(106) -> 16#cdec; | |
crc16tab(107) -> 16#ddcd; | |
crc16tab(108) -> 16#ad2a; | |
crc16tab(109) -> 16#bd0b; | |
crc16tab(110) -> 16#8d68; | |
crc16tab(111) -> 16#9d49; | |
crc16tab(112) -> 16#7e97; | |
crc16tab(113) -> 16#6eb6; | |
crc16tab(114) -> 16#5ed5; | |
crc16tab(115) -> 16#4ef4; | |
crc16tab(116) -> 16#3e13; | |
crc16tab(117) -> 16#2e32; | |
crc16tab(118) -> 16#1e51; | |
crc16tab(119) -> 16#0e70; | |
crc16tab(120) -> 16#ff9f; | |
crc16tab(121) -> 16#efbe; | |
crc16tab(122) -> 16#dfdd; | |
crc16tab(123) -> 16#cffc; | |
crc16tab(124) -> 16#bf1b; | |
crc16tab(125) -> 16#af3a; | |
crc16tab(126) -> 16#9f59; | |
crc16tab(127) -> 16#8f78; | |
crc16tab(128) -> 16#9188; | |
crc16tab(129) -> 16#81a9; | |
crc16tab(130) -> 16#b1ca; | |
crc16tab(131) -> 16#a1eb; | |
crc16tab(132) -> 16#d10c; | |
crc16tab(133) -> 16#c12d; | |
crc16tab(134) -> 16#f14e; | |
crc16tab(135) -> 16#e16f; | |
crc16tab(136) -> 16#1080; | |
crc16tab(137) -> 16#00a1; | |
crc16tab(138) -> 16#30c2; | |
crc16tab(139) -> 16#20e3; | |
crc16tab(140) -> 16#5004; | |
crc16tab(141) -> 16#4025; | |
crc16tab(142) -> 16#7046; | |
crc16tab(143) -> 16#6067; | |
crc16tab(144) -> 16#83b9; | |
crc16tab(145) -> 16#9398; | |
crc16tab(146) -> 16#a3fb; | |
crc16tab(147) -> 16#b3da; | |
crc16tab(148) -> 16#c33d; | |
crc16tab(149) -> 16#d31c; | |
crc16tab(150) -> 16#e37f; | |
crc16tab(151) -> 16#f35e; | |
crc16tab(152) -> 16#02b1; | |
crc16tab(153) -> 16#1290; | |
crc16tab(154) -> 16#22f3; | |
crc16tab(155) -> 16#32d2; | |
crc16tab(156) -> 16#4235; | |
crc16tab(157) -> 16#5214; | |
crc16tab(158) -> 16#6277; | |
crc16tab(159) -> 16#7256; | |
crc16tab(160) -> 16#b5ea; | |
crc16tab(161) -> 16#a5cb; | |
crc16tab(162) -> 16#95a8; | |
crc16tab(163) -> 16#8589; | |
crc16tab(164) -> 16#f56e; | |
crc16tab(165) -> 16#e54f; | |
crc16tab(166) -> 16#d52c; | |
crc16tab(167) -> 16#c50d; | |
crc16tab(168) -> 16#34e2; | |
crc16tab(169) -> 16#24c3; | |
crc16tab(170) -> 16#14a0; | |
crc16tab(171) -> 16#0481; | |
crc16tab(172) -> 16#7466; | |
crc16tab(173) -> 16#6447; | |
crc16tab(174) -> 16#5424; | |
crc16tab(175) -> 16#4405; | |
crc16tab(176) -> 16#a7db; | |
crc16tab(177) -> 16#b7fa; | |
crc16tab(178) -> 16#8799; | |
crc16tab(179) -> 16#97b8; | |
crc16tab(180) -> 16#e75f; | |
crc16tab(181) -> 16#f77e; | |
crc16tab(182) -> 16#c71d; | |
crc16tab(183) -> 16#d73c; | |
crc16tab(184) -> 16#26d3; | |
crc16tab(185) -> 16#36f2; | |
crc16tab(186) -> 16#0691; | |
crc16tab(187) -> 16#16b0; | |
crc16tab(188) -> 16#6657; | |
crc16tab(189) -> 16#7676; | |
crc16tab(190) -> 16#4615; | |
crc16tab(191) -> 16#5634; | |
crc16tab(192) -> 16#d94c; | |
crc16tab(193) -> 16#c96d; | |
crc16tab(194) -> 16#f90e; | |
crc16tab(195) -> 16#e92f; | |
crc16tab(196) -> 16#99c8; | |
crc16tab(197) -> 16#89e9; | |
crc16tab(198) -> 16#b98a; | |
crc16tab(199) -> 16#a9ab; | |
crc16tab(200) -> 16#5844; | |
crc16tab(201) -> 16#4865; | |
crc16tab(202) -> 16#7806; | |
crc16tab(203) -> 16#6827; | |
crc16tab(204) -> 16#18c0; | |
crc16tab(205) -> 16#08e1; | |
crc16tab(206) -> 16#3882; | |
crc16tab(207) -> 16#28a3; | |
crc16tab(208) -> 16#cb7d; | |
crc16tab(209) -> 16#db5c; | |
crc16tab(210) -> 16#eb3f; | |
crc16tab(211) -> 16#fb1e; | |
crc16tab(212) -> 16#8bf9; | |
crc16tab(213) -> 16#9bd8; | |
crc16tab(214) -> 16#abbb; | |
crc16tab(215) -> 16#bb9a; | |
crc16tab(216) -> 16#4a75; | |
crc16tab(217) -> 16#5a54; | |
crc16tab(218) -> 16#6a37; | |
crc16tab(219) -> 16#7a16; | |
crc16tab(220) -> 16#0af1; | |
crc16tab(221) -> 16#1ad0; | |
crc16tab(222) -> 16#2ab3; | |
crc16tab(223) -> 16#3a92; | |
crc16tab(224) -> 16#fd2e; | |
crc16tab(225) -> 16#ed0f; | |
crc16tab(226) -> 16#dd6c; | |
crc16tab(227) -> 16#cd4d; | |
crc16tab(228) -> 16#bdaa; | |
crc16tab(229) -> 16#ad8b; | |
crc16tab(230) -> 16#9de8; | |
crc16tab(231) -> 16#8dc9; | |
crc16tab(232) -> 16#7c26; | |
crc16tab(233) -> 16#6c07; | |
crc16tab(234) -> 16#5c64; | |
crc16tab(235) -> 16#4c45; | |
crc16tab(236) -> 16#3ca2; | |
crc16tab(237) -> 16#2c83; | |
crc16tab(238) -> 16#1ce0; | |
crc16tab(239) -> 16#0cc1; | |
crc16tab(240) -> 16#ef1f; | |
crc16tab(241) -> 16#ff3e; | |
crc16tab(242) -> 16#cf5d; | |
crc16tab(243) -> 16#df7c; | |
crc16tab(244) -> 16#af9b; | |
crc16tab(245) -> 16#bfba; | |
crc16tab(246) -> 16#8fd9; | |
crc16tab(247) -> 16#9ff8; | |
crc16tab(248) -> 16#6e17; | |
crc16tab(249) -> 16#7e36; | |
crc16tab(250) -> 16#4e55; | |
crc16tab(251) -> 16#5e74; | |
crc16tab(252) -> 16#2e93; | |
crc16tab(253) -> 16#3eb2; | |
crc16tab(254) -> 16#0ed1; | |
crc16tab(255) -> 16#1ef0. | |
-ifdef(TEST). | |
-include_lib("eunit/include/eunit.hrl"). | |
calculate_test() -> | |
?assertEqual(261402099958626, calculate("hello")), | |
?assertEqual(1018436016523, calculate("hola")), | |
ok. | |
-endif. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment