Skip to content

Instantly share code, notes, and snippets.

@maxlapshin
Created December 6, 2013 19:27
Show Gist options
  • Save maxlapshin/7830701 to your computer and use it in GitHub Desktop.
Save maxlapshin/7830701 to your computer and use it in GitHub Desktop.
-module(crc17).
-export([calc/1]).
calc(List) -> calc(List,16#FFFF).
calc(<<>>,CRC) ->
CRC;
calc(<<Value:8,Rest/binary>>,CRC) ->
Index = (CRC bxor Value) band 255,
NewCRC = (CRC bsr 8) bxor crc_index(Index),
calc(Rest,NewCRC).
crc_index(0) -> 16#0000;
crc_index(1) -> 16#C0C1;
crc_index(2) -> 16#C181;
crc_index(3) -> 16#0140;
crc_index(4) -> 16#C301;
crc_index(5) -> 16#03C0;
crc_index(6) -> 16#0280;
crc_index(7) -> 16#C241;
crc_index(8) -> 16#C601;
crc_index(9) -> 16#06C0;
crc_index(10) -> 16#0780;
crc_index(11) -> 16#C741;
crc_index(12) -> 16#0500;
crc_index(13) -> 16#C5C1;
crc_index(14) -> 16#C481;
crc_index(15) -> 16#0440;
crc_index(16) -> 16#CC01;
crc_index(17) -> 16#0CC0;
crc_index(18) -> 16#0D80;
crc_index(19) -> 16#CD41;
crc_index(20) -> 16#0F00;
crc_index(21) -> 16#CFC1;
crc_index(22) -> 16#CE81;
crc_index(23) -> 16#0E40;
crc_index(24) -> 16#0A00;
crc_index(25) -> 16#CAC1;
crc_index(26) -> 16#CB81;
crc_index(27) -> 16#0B40;
crc_index(28) -> 16#C901;
crc_index(29) -> 16#09C0;
crc_index(30) -> 16#0880;
crc_index(31) -> 16#C841;
crc_index(32) -> 16#D801;
crc_index(33) -> 16#18C0;
crc_index(34) -> 16#1980;
crc_index(35) -> 16#D941;
crc_index(36) -> 16#1B00;
crc_index(37) -> 16#DBC1;
crc_index(38) -> 16#DA81;
crc_index(39) -> 16#1A40;
crc_index(40) -> 16#1E00;
crc_index(41) -> 16#DEC1;
crc_index(42) -> 16#DF81;
crc_index(43) -> 16#1F40;
crc_index(44) -> 16#DD01;
crc_index(45) -> 16#1DC0;
crc_index(46) -> 16#1C80;
crc_index(47) -> 16#DC41;
crc_index(48) -> 16#1400;
crc_index(49) -> 16#D4C1;
crc_index(50) -> 16#D581;
crc_index(51) -> 16#1540;
crc_index(52) -> 16#D701;
crc_index(53) -> 16#17C0;
crc_index(54) -> 16#1680;
crc_index(55) -> 16#D641;
crc_index(56) -> 16#D201;
crc_index(57) -> 16#12C0;
crc_index(58) -> 16#1380;
crc_index(59) -> 16#D341;
crc_index(60) -> 16#1100;
crc_index(61) -> 16#D1C1;
crc_index(62) -> 16#D081;
crc_index(63) -> 16#1040;
crc_index(64) -> 16#F001;
crc_index(65) -> 16#30C0;
crc_index(66) -> 16#3180;
crc_index(67) -> 16#F141;
crc_index(68) -> 16#3300;
crc_index(69) -> 16#F3C1;
crc_index(70) -> 16#F281;
crc_index(71) -> 16#3240;
crc_index(72) -> 16#3600;
crc_index(73) -> 16#F6C1;
crc_index(74) -> 16#F781;
crc_index(75) -> 16#3740;
crc_index(76) -> 16#F501;
crc_index(77) -> 16#35C0;
crc_index(78) -> 16#3480;
crc_index(79) -> 16#F441;
crc_index(80) -> 16#3C00;
crc_index(81) -> 16#FCC1;
crc_index(82) -> 16#FD81;
crc_index(83) -> 16#3D40;
crc_index(84) -> 16#FF01;
crc_index(85) -> 16#3FC0;
crc_index(86) -> 16#3E80;
crc_index(87) -> 16#FE41;
crc_index(88) -> 16#FA01;
crc_index(89) -> 16#3AC0;
crc_index(90) -> 16#3B80;
crc_index(91) -> 16#FB41;
crc_index(92) -> 16#3900;
crc_index(93) -> 16#F9C1;
crc_index(94) -> 16#F881;
crc_index(95) -> 16#3840;
crc_index(96) -> 16#2800;
crc_index(97) -> 16#E8C1;
crc_index(98) -> 16#E981;
crc_index(99) -> 16#2940;
crc_index(100) -> 16#EB01;
crc_index(101) -> 16#2BC0;
crc_index(102) -> 16#2A80;
crc_index(103) -> 16#EA41;
crc_index(104) -> 16#EE01;
crc_index(105) -> 16#2EC0;
crc_index(106) -> 16#2F80;
crc_index(107) -> 16#EF41;
crc_index(108) -> 16#2D00;
crc_index(109) -> 16#EDC1;
crc_index(110) -> 16#EC81;
crc_index(111) -> 16#2C40;
crc_index(112) -> 16#E401;
crc_index(113) -> 16#24C0;
crc_index(114) -> 16#2580;
crc_index(115) -> 16#E541;
crc_index(116) -> 16#2700;
crc_index(117) -> 16#E7C1;
crc_index(118) -> 16#E681;
crc_index(119) -> 16#2640;
crc_index(120) -> 16#2200;
crc_index(121) -> 16#E2C1;
crc_index(122) -> 16#E381;
crc_index(123) -> 16#2340;
crc_index(124) -> 16#E101;
crc_index(125) -> 16#21C0;
crc_index(126) -> 16#2080;
crc_index(127) -> 16#E041;
crc_index(128) -> 16#A001;
crc_index(129) -> 16#60C0;
crc_index(130) -> 16#6180;
crc_index(131) -> 16#A141;
crc_index(132) -> 16#6300;
crc_index(133) -> 16#A3C1;
crc_index(134) -> 16#A281;
crc_index(135) -> 16#6240;
crc_index(136) -> 16#6600;
crc_index(137) -> 16#A6C1;
crc_index(138) -> 16#A781;
crc_index(139) -> 16#6740;
crc_index(140) -> 16#A501;
crc_index(141) -> 16#65C0;
crc_index(142) -> 16#6480;
crc_index(143) -> 16#A441;
crc_index(144) -> 16#6C00;
crc_index(145) -> 16#ACC1;
crc_index(146) -> 16#AD81;
crc_index(147) -> 16#6D40;
crc_index(148) -> 16#AF01;
crc_index(149) -> 16#6FC0;
crc_index(150) -> 16#6E80;
crc_index(151) -> 16#AE41;
crc_index(152) -> 16#AA01;
crc_index(153) -> 16#6AC0;
crc_index(154) -> 16#6B80;
crc_index(155) -> 16#AB41;
crc_index(156) -> 16#6900;
crc_index(157) -> 16#A9C1;
crc_index(158) -> 16#A881;
crc_index(159) -> 16#6840;
crc_index(160) -> 16#7800;
crc_index(161) -> 16#B8C1;
crc_index(162) -> 16#B981;
crc_index(163) -> 16#7940;
crc_index(164) -> 16#BB01;
crc_index(165) -> 16#7BC0;
crc_index(166) -> 16#7A80;
crc_index(167) -> 16#BA41;
crc_index(168) -> 16#BE01;
crc_index(169) -> 16#7EC0;
crc_index(170) -> 16#7F80;
crc_index(171) -> 16#BF41;
crc_index(172) -> 16#7D00;
crc_index(173) -> 16#BDC1;
crc_index(174) -> 16#BC81;
crc_index(175) -> 16#7C40;
crc_index(176) -> 16#B401;
crc_index(177) -> 16#74C0;
crc_index(178) -> 16#7580;
crc_index(179) -> 16#B541;
crc_index(180) -> 16#7700;
crc_index(181) -> 16#B7C1;
crc_index(182) -> 16#B681;
crc_index(183) -> 16#7640;
crc_index(184) -> 16#7200;
crc_index(185) -> 16#B2C1;
crc_index(186) -> 16#B381;
crc_index(187) -> 16#7340;
crc_index(188) -> 16#B101;
crc_index(189) -> 16#71C0;
crc_index(190) -> 16#7080;
crc_index(191) -> 16#B041;
crc_index(192) -> 16#5000;
crc_index(193) -> 16#90C1;
crc_index(194) -> 16#9181;
crc_index(195) -> 16#5140;
crc_index(196) -> 16#9301;
crc_index(197) -> 16#53C0;
crc_index(198) -> 16#5280;
crc_index(199) -> 16#9241;
crc_index(200) -> 16#9601;
crc_index(201) -> 16#56C0;
crc_index(202) -> 16#5780;
crc_index(203) -> 16#9741;
crc_index(204) -> 16#5500;
crc_index(205) -> 16#95C1;
crc_index(206) -> 16#9481;
crc_index(207) -> 16#5440;
crc_index(208) -> 16#9C01;
crc_index(209) -> 16#5CC0;
crc_index(210) -> 16#5D80;
crc_index(211) -> 16#9D41;
crc_index(212) -> 16#5F00;
crc_index(213) -> 16#9FC1;
crc_index(214) -> 16#9E81;
crc_index(215) -> 16#5E40;
crc_index(216) -> 16#5A00;
crc_index(217) -> 16#9AC1;
crc_index(218) -> 16#9B81;
crc_index(219) -> 16#5B40;
crc_index(220) -> 16#9901;
crc_index(221) -> 16#59C0;
crc_index(222) -> 16#5880;
crc_index(223) -> 16#9841;
crc_index(224) -> 16#8801;
crc_index(225) -> 16#48C0;
crc_index(226) -> 16#4980;
crc_index(227) -> 16#8941;
crc_index(228) -> 16#4B00;
crc_index(229) -> 16#8BC1;
crc_index(230) -> 16#8A81;
crc_index(231) -> 16#4A40;
crc_index(232) -> 16#4E00;
crc_index(233) -> 16#8EC1;
crc_index(234) -> 16#8F81;
crc_index(235) -> 16#4F40;
crc_index(236) -> 16#8D01;
crc_index(237) -> 16#4DC0;
crc_index(238) -> 16#4C80;
crc_index(239) -> 16#8C41;
crc_index(240) -> 16#4400;
crc_index(241) -> 16#84C1;
crc_index(242) -> 16#8581;
crc_index(243) -> 16#4540;
crc_index(244) -> 16#8701;
crc_index(245) -> 16#47C0;
crc_index(246) -> 16#4680;
crc_index(247) -> 16#8641;
crc_index(248) -> 16#8201;
crc_index(249) -> 16#42C0;
crc_index(250) -> 16#4380;
crc_index(251) -> 16#8341;
crc_index(252) -> 16#4100;
crc_index(253) -> 16#81C1;
crc_index(254) -> 16#8081;
crc_index(255) -> 16#4040.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment