NMEA 0183 체크섬 계산기
GPS 등 항법 장비가 쓰는 NMEA 0183 문장의 체크섬을 계산·검증합니다. "$"와 "*" 사이 문자를 모두 XOR한 2자리 16진수로, CRC와는 다른 훨씬 단순한 방식입니다.
"$"와 "*체크섬"은 있어도 없어도 됩니다
계산된 체크섬
*47
입력에 체크섬이 없어 계산만 했습니다
본문("$"와 "*" 사이)GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,
완성된 문장$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47
NMEA 0183은 GPS 수신기 등 항법 장비가 $GPGGA,...*47 형태의 텍스트 줄로 위치·시간 정보를 주고받는 오래된 직렬 통신 표준입니다. 체크섬은 "$"와 "*" 사이의 모든 문자를 바이트값으로 보고 전부 XOR한 값을 2자리 16진수로 적은 것입니다. dev/crc-checksum(CRC, 다항식 나눗셈)과는 전혀 다른, 훨씬 단순한 방식입니다.
XOR 체크섬은 같은 값이 두 번 뒤집히면 서로 지워지는 성질 때문에, 자리를 통째로 맞바꾸는 등 짝수 번 겹치는 오류는 놓칠 수 있습니다. 그래도 직렬선 잡음으로 흔한 단일 비트 오류는 잘 잡아서 저전력 기기에 널리 쓰입니다. 입력값은 서버로 전송되지 않고 브라우저 안에서만 계산됩니다.
사용 방법
- 1NMEA 문장을 입력합니다. "$"와 "*체크섬"은 있어도 없어도 됩니다.
- 2계산된 체크섬과, 입력에 체크섬이 있었다면 일치 여부가 나옵니다.
- 3완성된 문장을 복사해 그대로 쓸 수 있습니다.
자주 묻는 질문
"$"와 "*" 사이(둘 다 제외)의 모든 문자를 바이트값으로 보고 전부 XOR(배타적 논리합)한 뒤, 그 결과를 2자리 대문자 16진수로 적습니다. 예를 들어 표준 예제 문장 $GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47에서 체크섬은 47입니다.
완전히 다른 알고리즘입니다. CRC는 다항식으로 나눈 나머지를 쓰는 반면, NMEA 체크섬은 문자값을 그냥 XOR만 합니다. 계산이 훨씬 간단해 저전력 GPS·항법 장비에 적합하지만, 검출 성능은 CRC보다 약합니다.
네. XOR은 같은 값이 두 번 뒤집히면 서로 지워지므로, 짝수 번 겹치는 오류(예: 특정 조건에서 두 글자가 자리를 맞바꾸는 경우)는 놓칠 수 있습니다. 그래도 직렬선 잡음으로 흔히 생기는 단일 비트 오류는 잘 잡아냅니다.
알아두면 좋은 점
- NMEA 0183 표준의 체크섬 정의(XOR of each character between "$" and "*")를 구현했습니다. 이 환경 네트워크 정책상 표준 원문을 직접 열람하지 못해, GitHub의 독립 구현(ktuukkan/marine-api의 Checksum.java)을 대조했고, 그 알고리즘으로 계산한 값이 여러 문헌에 널리 인용되는 표준 예제 문장의 체크섬(47)과 정확히 일치함을 확인했습니다(2026-09-11).
- 입력값은 서버로 전송되지 않고 브라우저 안에서만 계산됩니다.
함께 보면 좋은 도구
마지막 검증: 2026년 9월 11일 · 결과는 참고용 추정치입니다.