🗂️ Project Review

[Java] Checksum Calculator (체크섬 계산기)

kimgoat 2023. 12. 23. 14:17
기본적인 구현 방식 및 전체 구조 설명

 

위 영상에서 설명한 개념을 토대로 코드를 짰다.

 

main: 생성다항식(polyCode)과 수신데이터(data)를 입력하면 checksum을 계산한다.

binaryToInt: 이진수를 십진수로 변환

intToBinary: 십진수를 이진수로 변환

addZero: XOR연산을 위해 생성다항식에 0을 추가

extendData: 확장데이터 생성

XOR: XOR연산

verifyError : 오류검출

 

각 메소드 및 클래스 별 (코드) 내용 설명
import java.util.Scanner;

public class Main {
	public String polyCode;
	public String data ;
	public String result;

	public int intPolycode;
	public int getIntPolycode(){
		return this.intPolycode;
	}
	public void setIntPolycode(int intPolycode){
		this.intPolycode = intPolycode;
	}
	public int intData;
	public int getIntData(){
		return this.intData;
	}
	public void setIntData(int intData){
		this.intData = intData;
	}
	public String extendNum;

	
	public static void main(String args[]) {
		Main main = new Main();
		Scanner in = new Scanner(System.in);

		System.out.print("생성다항식을 입력하시오(input polynomial code):");
		main.polyCode = in.next();
		System.out.print("수신할 데이터를 입력하시오(input data):");
		main.data = in.next();

		main.extendData();
		main.XOR();
	}

	public int binaryToInt(String binaryString) {
		return Integer.parseInt(binaryString,2);
	}

	public String intToBinary(int num){
		return Integer.toBinaryString(num);
	}


	public String addZero(String poly,int n) {
		for(int i=0; i<n; i++) {
			poly += "0";
		}

		this.setIntPolycode(this.binaryToInt(poly));
		return poly;
	}

	

	public String extendData() {
		 int degree= this.polyCode.length()-1;
		 String temp = this.data+"";
	     for(int i=0; i<degree; i++) {
	    	 temp += "0";
	     }
	     this.extendNum = temp;

		 this.setIntData(this.binaryToInt(extendNum));
	     return extendNum;
	}

	public void XOR(){
		this.addZero(polyCode, this.extendNum.length()-this.polyCode.length());

		int temp = this.getIntData() ^ this.getIntPolycode();


		while(Math.pow(2, this.polyCode.length()-1)<temp){
			this.addZero(polyCode, this.intToBinary(temp).length()-this.polyCode.length());
			this.setIntData(temp);
			temp = this.getIntData() ^ this.getIntPolycode();
		}

		int degree= this.polyCode.length()-1;
		String tmp = "";
		for(int i=0; i<degree - intToBinary(temp).length(); i++){
			tmp += "0";
		}
		this.result = this.data +tmp+ intToBinary(temp);

		System.out.print("checksum: ");
		System.out.println(result);

		this.verifyError(result);
	}

	public void verifyError(String result){
		this.addZero(polyCode, this.extendNum.length()-this.polyCode.length());
		int temp = binaryToInt(result) ^ this.getIntPolycode();
		while(Math.pow(2, this.polyCode.length()-1)<temp){
			this.addZero(polyCode, this.intToBinary(temp).length()-this.polyCode.length());
			this.setIntData(temp);
			temp = this.getIntData() ^ this.getIntPolycode();
		}
		if(temp == 0){
			System.out.println("No error");
		}else{
			System.out.println("error");
		}
	}

}

 

 

 

 

 

 

 

 

Source Code: https://github.com/kimgoat/checksum_calculator

 

GitHub - kimgoat/checksum_calculator

Contribute to kimgoat/checksum_calculator development by creating an account on GitHub.

github.com

 

 

<출처>

- 그리타GRITA, (2019.3.11.) 기술사 - 네트워크 - CRC [Youtube] 검색경로: https://www.youtube.com/watch?v=UiodRz3wsnI