From c0e3642ba33cc16ff3f3fd19f19b0bbf8239cd62 Mon Sep 17 00:00:00 2001 From: Priyanshu Singh <123263608+dev-priyanshu15@users.noreply.github.com> Date: Sat, 12 Oct 2024 15:57:25 +0530 Subject: [PATCH] Create CRC-16.go add hacktoberfest label --- checksum/CRC-16.go | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 checksum/CRC-16.go diff --git a/checksum/CRC-16.go b/checksum/CRC-16.go new file mode 100644 index 000000000..96c8c4d7b --- /dev/null +++ b/checksum/CRC-16.go @@ -0,0 +1,26 @@ +// Package checksum provides functions for calculating various checksum values. +package checksum + +import "fmt" + +// CRC16 computes the CRC-16 checksum of the input data. +func CRC16(data []byte) uint16 { + var crc uint16 = 0xFFFF + for _, b := range data { + crc ^= uint16(b) + for i := 0; i < 8; i++ { + if crc&0x0001 != 0 { + crc = (crc >> 1) ^ 0xA001 + } else { + crc >>= 1 + } + } + } + return crc +} + +// CRC16Hex computes the CRC-16 checksum of a string and returns it as a hexadecimal string. +func CRC16Hex(input string) string { + crc := CRC16([]byte(input)) + return fmt.Sprintf("%04X", crc) +}