Computer >> 컴퓨터 >  >> 프로그램 작성 >> Java

Java를 사용하여 체크섬 구현

<시간/>

다음은 Java를 사용하여 체크섬을 구현하는 코드입니다 -

import java.util.*;
public class Demo{
   public static void main(String args[]){
      Scanner my_scan = new Scanner(System.in);
      System.out.println("Enter the input string ");
      String my_in = my_scan.next();
      int my_checksum = generate_checksum(my_in);
      System.out.println("The checksum that has been generated is " + Integer.toHexString(my_checksum));
      System.out.println("Enter the data that needs to be sent to the receiver ");
      my_in = my_scan.next();
      System.out.println("Enter the checksum that needs to be sent to the receiver ");
      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("The value of syndrome is " + Integer.toHexString(syndrome));
      if (syndrome == 0){
         System.out.println("Data has been received without any errors");
      } else {
         System.out.println("An error was encountered in the received data");
      }
   }
   static int generate_complement(int my_checksum){
      my_checksum = Integer.parseInt("FFFF", 16) - my_checksum;
      return my_checksum;
   }
}

입력

sample
sample
b2c8

출력

Enter the input string
sa : 7361
mp : 6d70
le : 6c65
The checksum that has been generated is b2c8
Enter the data that needs to be sent to the receiver
Enter the checksum that needs to be sent to the receiver
sa : 7361
mp : 6d70
le : 6c65
The value of syndrome is 0
Data has been received without any errors

Demo라는 클래스에는 주요 기능이 포함되어 있습니다. 여기에서 Scanner 인스턴스가 정의되고 입력 문자열이 정의됩니다.

새로운 문자열 인스턴스를 생성하고 체크섬을 0으로 초기화하는 'generate_checksum' 함수가 정의되어 있습니다. 이 함수에 매개변수로 전달된 문자열은 반복되어 16진수 값으로 변환됩니다. 모든 문자는 반복되고 정수 값으로 변환됩니다. 그런 다음 16진수 값으로 변환됩니다. 그러면 다음 문자의 16진수 값에 16진수 값이 추가됩니다.

문자열의 길이가 짝수이면 모든 문자가 반복되어 정수 값으로 변환됩니다. 그런 다음 16진수 값으로 변환됩니다. 그런 다음 16진수 값이 다음 문자의 16진수 값에 추가됩니다. 그렇지 않으면 '00'으로 연결됩니다.

'receive' 함수는 'generate_checksum' 함수를 호출하고 결과를 전달합니다. 그런 다음 원래 체크섬 값(초기 0)에 추가됩니다. 그런 다음 16진수 값으로 변환됩니다. 이 길이가 4보다 크면 'carry' 값이 생성됩니다. 원래 체크섬이 구문 분석되어 'carry' 값에 추가됩니다. 이 스니펫이 실행되면 체크섬 값에 대해 'generate_complement' 함수가 호출됩니다. 'generate_complement' 함수는 'FFFF'-16에서 체크섬 값을 뺍니다.