Untitled
public class CRC8WCDMA { // Funkcja obliczająca CRC-8-WCDMA public static int crc8Wcdma(byte[] data) { int polynomial = 0x9B; // Generating polynomial: 0x9B (10011011) int crc = 0x00; // Start value for (byte b : data) { crc ^= b; // Rozpocznij od XOR z aktualnym bajtem for (int i = 0; i < 8; i++) { // Iteruj przez każdy bit if ((crc & 0x80) != 0) { // Jeśli najstarszy bit jest ustawiony crc = (crc << 1) ^ polynomial; // Przesuń w lewo i XOR z generatorem } else { crc <<= 1; // Tylko przesunięcie w lewo } crc &= 0xFF; // Zachowaj tylko 8 bitów } } return crc; } public static void main(String[] args) { // Przykładowy UUID String uuid = "39223d25-e021-49cd-b490-ef111ca11d13"; // Usuń myślniki z UUID i przekonwertuj na bajty byte[] uuidBytes = hexStringToByteArray(uuid.replace("-", "")); // Obliczanie CRC-8-WCDMA int crcValue = crc8Wcdma(uuidBytes); System.out.println("Suma kontrolna CRC-8-WCDMA: " + crcValue); } // Funkcja konwertująca string hex na tablicę bajtów public static byte[] hexStringToByteArray(String hex) { int length = hex.length(); byte[] data = new byte[length / 2]; for (int i = 0; i < length; i += 2) { data[i / 2] = (byte) ((Character.digit(hex.charAt(i), 16) << 4) + Character.digit(hex.charAt(i + 1), 16)); } return data; } }
Leave a Comment