parent
eb375a6015
commit
b8d6b1a9b0
29
src/main/java/com/thealgorithms/others/CRC16.java
Normal file
29
src/main/java/com/thealgorithms/others/CRC16.java
Normal file
@ -0,0 +1,29 @@
|
||||
package com.thealgorithms.others;
|
||||
|
||||
/**
|
||||
* Generates a crc16 checksum for a given string
|
||||
*/
|
||||
public class CRC16 {
|
||||
|
||||
public static void main(String[] args) {
|
||||
System.out.println(crc16("Hello World!"));
|
||||
}
|
||||
|
||||
public static String crc16(String message) {
|
||||
int crc = 0xFFFF; // initial value
|
||||
int polynomial = 0x1021; // 0001 0000 0010 0001 (0, 5, 12)
|
||||
byte[] bytes = message.getBytes();
|
||||
|
||||
for (byte b : bytes) {
|
||||
for (int i = 0; i < 8; i++) {
|
||||
boolean bit = ((b >> (7 - i) & 1) == 1);
|
||||
boolean c15 = ((crc >> 15 & 1) == 1);
|
||||
crc <<= 1;
|
||||
if (c15 ^ bit)
|
||||
crc ^= polynomial;
|
||||
}
|
||||
}
|
||||
crc &= 0xffff;
|
||||
return Integer.toHexString(crc).toUpperCase();
|
||||
}
|
||||
}
|
23
src/test/java/com/thealgorithms/others/CRC16Test.java
Normal file
23
src/test/java/com/thealgorithms/others/CRC16Test.java
Normal file
@ -0,0 +1,23 @@
|
||||
package com.thealgorithms.others;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
class CRC16Test {
|
||||
|
||||
CRC16 crc = new CRC16();
|
||||
|
||||
@Test
|
||||
void testCRC16() {
|
||||
// given
|
||||
String textToCRC16 = "hacktoberfest!";
|
||||
|
||||
// when
|
||||
String resultCRC16 = crc.crc16(textToCRC16); // Algorithm CRC16-CCITT-FALSE
|
||||
|
||||
// then
|
||||
assertEquals("10FC", resultCRC16);
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user