Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Triển khai Checksum bằng Java

Dưới đây là mã triển khai Checksum bằng Java:

Ví dụ

import java.util.*; 
public class Demo{ 
    public static void main(String args[]){ 
        Scanner my_scan = new Scanner(System.in); 
        System.out.println("Nhập chuỗi đầu vào: "); 
        String my_in = my_scan.next(); 
        int my_checksum = generate_checksum(my_in); 
        System.out.println("Checksum đã tạo: " + Integer.toHexString(my_checksum)); 
        System.out.println("Nhập dữ liệu cần gửi đến người nhận: "); 
        my_in = my_scan.next(); 
        System.out.println("Nhập checksum cần gửi đến người nhận: "); 
        my_checksum = Integer.parseInt((my_scan.next()), 16); 
        receive(my_in, my_checksum); 
        my_scan.close(); 
    } 
    static int generate_checksum(String s){ 
        String my_hex_val = new String(); 
        int x, i, my_checksum = 0; 
        for (i = 0; i < s.length() - 2; i = i + 2){ 
            x = (int) (s.charAt(i)); 
            my_hex_val = Integer.toHexString(x); 
            x = (int) (s.charAt(i + 1)); 
            my_hex_val = my_hex_val + Integer.toHexString(x); 
            System.out.println(s.charAt(i) + "" + s.charAt(i + 1) + " : " + my_hex_val); 
            x = Integer.parseInt(my_hex_val, 16); 
            my_checksum += x; 
        } 
        if (s.length() % 2 == 0){ 
            x = (int) (s.charAt(i)); 
            my_hex_val = Integer.toHexString(x); 
            x = (int) (s.charAt(i + 1)); 
            my_hex_val = my_hex_val + Integer.toHexString(x); 
            System.out.println(s.charAt(i) + "" + s.charAt(i + 1) + " : " + my_hex_val); 
            x = Integer.parseInt(my_hex_val, 16); 
        } else { 
            x = (int) (s.charAt(i)); 
            my_hex_val = "00" + Integer.toHexString(x); 
            x = Integer.parseInt(my_hex_val, 16); 
            System.out.println(s.charAt(i) + " : " + my_hex_val); 
        } 
        my_checksum += x; 
        my_hex_val = Integer.toHexString(my_checksum); 
        if (my_hex_val.length() > 4){ 
            int carry = Integer.parseInt(("" + my_hex_val.charAt(0)), 16); 
            my_hex_val = my_hex_val.substring(1, 5); 
            my_checksum = Integer.parseInt(my_hex_val, 16); 
            my_checksum += carry; 
        } 
        my_checksum = generate_complement(my_checksum); 
        return my_checksum; 
    } 
    static void receive(String s, int my_checksum){ 
        int gen_checksum = generate_checksum(s); 
        gen_checksum = generate_complement(gen_checksum); 
        int syndrome = gen_checksum + my_checksum; 
        syndrome = generate_complement(syndrome); 
        System.out.println("Giá trị syndrome: " + Integer.toHexString(syndrome)); 
        if (syndrome == 0){ 
            System.out.println("Dữ liệu nhận không lỗi"); 
        } else { 
            System.out.println("Gặp lỗi trong dữ liệu nhận"); 
        } 
    } 
    static int generate_complement(int my_checksum){ 
        my_checksum = Integer.parseInt("FFFF", 16) - my_checksum; 
        return my_checksum; 
    } 
}

Đầu vào

sample sample b2c8

Kết quả

Nhập chuỗi đầu vào 
sa : 7361 
mp : 6d70 
le : 6c65 
Checksum đã tạo: b2c8 
Nhập dữ liệu cần gửi đến người nhận 
Nhập checksum cần gửi đến người nhận 
sa : 7361 
mp : 6d70 
le : 6c65 
Giá trị syndrome: 0 
Dữ liệu nhận không lỗi

Lớp Demo chứa main. Instance Scanner định nghĩa, chuỗi đầu vào định nghĩa.

Hàm generate_checksum tạo instance String mới, khởi tạo checksum 0. Chuỗi truyền tham số duyệt qua, chuyển giá trị hex. Mỗi ký tự duyệt, chuyển int, rồi hex. Hex cộng với hex ký tự tiếp theo.

Nếu độ dài chuỗi chẵn, mỗi ký tự duyệt, chuyển int, hex, cộng hex ký tự tiếp. Ngược lại, nối với 00.

Hàm receive gọi generate_checksum truyền kết quả. Cộng với checksum gốc (ban đầu 0). Chuyển hex. Nếu độ dài > 4, tạo carry. Checksum gốc parse và cộng carry. Sau snippet, generate_complement gọi trên checksum. Hàm generate_complement trừ checksum từ FFFF hex.