메뉴

ISBN ISSN 체크 디지트: 책과 간행물 번호

책과 정기 간행물에 붙는 번호의 마지막 자리가 어떻게 정해지는지, 문자 X가 등장하는 이유, 하이픈 위치가 고정되지 않는 이유를 정리합니다.

게시일

  • 도서 번호
  • 체크 디지트

책 뒤표지와 학술지 표지에 붙는 번호에도 마지막 자리를 검사하는 장치가 있습니다. 도서와 간행물은 서로 다른 체계를 쓰지만, 검증값을 두는 목적과 계산의 골격은 닮았습니다. 이 글에서는 두 체계의 차이와 마지막 자리 계산에서 조심할 지점, 그리고 실무에서 자주 어긋나는 부분을 정리합니다.

도서 번호와 간행물 번호는 무엇이 다른가요?

하나는 책처럼 한 번 발행되고 끝나는 출판물에 붙고, 다른 하나는 정기적으로 계속 나오는 간행물에 붙습니다. 그래서 식별의 단위가 다릅니다. 도서 번호는 개별 판본 하나하나를 가리키는 반면, 간행물 번호는 발행물 자체의 제목 단위를 가리킵니다. 같은 잡지의 이번 호와 다음 호는 같은 번호를 공유합니다.

이 차이는 검증 절차에도 반영됩니다. 도서 번호는 판본마다 값이 달라지므로 한 번 확인한 값이 오래 쓰이지 않는 반면, 간행물 번호는 오래 유지됩니다. 두 체계 모두 마지막 자리를 계산으로 검사할 수 있지만, 무엇을 식별하는 번호인지 알고 처리해야 오류 문구가 어긋나지 않습니다.

마지막 자리는 어떻게 계산되나요?

두 체계 모두 앞자리에 자리별 가중치를 곱해 더한 뒤 나머지를 이용해 한 자리 값을 만드는 골격을 따릅니다. 가중치를 매기는 방식과 나누는 수, 그리고 나머지를 값으로 옮기는 규칙이 체계마다 다릅니다. 도서 번호에서도 판본을 구분하는 오래된 체계와 나중에 정리된 체계가 쓰는 매개변수가 다릅니다.

체계 구분 검증값의 특징 실무적 주의점
도서 번호 구 체계 마지막 한 자리 가중치가 순서대로 커짐
도서 번호 신 체계 마지막 한 자리 가중치가 번갈아 반복됨
간행물 번호 마지막 한 자리 고정된 가중치 배열 사용

두 도서 체계가 쓰는 계산 결과의 값 범위가 달라서, 같은 숫자열이 한쪽에서는 성립하고 다른 쪽에서는 어긋날 수 있습니다. 그래서 어느 체계의 값인지 먼저 판단해야 합니다. 계산 가족의 전체 지형은 체크 디지트 알고리즘 편에서 비교했습니다.

마지막 자리에 왜 문자가 올 수 있나요?

계산 결과가 숫자 하나로 떨어지지 않는 경우가 있습니다. 나머지가 특정 값일 때는 열 번째 값을 뜻하는 문자를 대신 넣도록 규칙이 정해져 있습니다. 이 문자는 예외 처리가 아니라 규칙의 일부이며, 대문자와 소문자 중 어느 쪽을 쓰는지도 정해져 있습니다.

여기서 흔한 구현 실수가 나옵니다. 마지막 자리를 숫자로만 가정하고 입력을 걸러 버리면, 규칙에 맞는 값이 형식 오류로 처리됩니다. 저장 형식을 정할 때도 주의가 필요합니다. 문자를 숫자 열로 변환하는 과정에서 이 값이 사라질 수 있으므로, 문자열로 보관하는 편이 안전합니다.

하이픈 위치는 항상 같은가요?

같지 않습니다. 표시할 때 끼우는 하이픈은 번호를 읽기 쉽게 나눈 구분 기호이며, 나누는 지점은 번호마다 다릅니다. 같은 자릿수의 번호라도 하이픈이 들어가는 자리가 달라질 수 있습니다. 그래서 하이픈의 위치를 보고 번호 체계를 판별하려는 접근은 신뢰할 수 없습니다.

검사할 때는 하이픈을 모두 걷어낸 뒤 순수한 문자와 숫자만 남겨 계산해야 합니다. 반대로 화면에 보여줄 때는 원래의 구분을 되살려야 읽기 편합니다. 저장과 표시를 나눠 두는 원칙이 여기서도 그대로 적용됩니다. 문자를 숫자로 바꿔 계산하는 방식 자체는 IBAN 구조와 mod-97 검증 편에서 다른 사례로 다뤘습니다.

번호가 바뀌는 경우는 어떻게 다루나요?

출판물의 식별 번호는 한 번 정해지면 대체로 유지되지만, 제도가 개편되면 새 체계의 번호가 함께 부여되기도 합니다. 그래서 한 출판물이 두 체계의 번호를 동시에 가질 수 있고, 어느 쪽으로 조회하느냐에 따라 결과가 달라집니다. 오래된 장서를 다루는 시스템이라면 두 체계를 모두 저장하는 편이 좋습니다.

또 하나 고려할 점은 번호가 재사용되지 않는다는 원칙입니다. 폐기된 번호는 다른 출판물에 다시 부여되지 않으므로, 번호 하나는 특정 판본을 가리키는 고정된 표지로 남습니다. 다만 그 번호가 실제로 발급되었는지는 계산으로 알 수 없고, 별도의 등록 자료를 확인해야 합니다.

출판물 자료를 모으다 보면 두 도서 체계의 번호와 간행물 번호가 한 목록에 섞입니다. 이때 길이나 접두부만 보고 체계를 단정하면 어긋난 판정이 나옵니다. 안전한 순서는 값을 정리한 뒤 길이로 큰 갈래를 가르고, 그 다음 각 체계의 계산을 차례로 적용해 보는 것입니다. 두 체계 모두에서 성립하는 값은 두 결과를 함께 보여주는 편이 정확합니다.

섞인 목록에서 흔한 사고는 하나의 계산 함수를 모든 값에 적용하는 것입니다. 길이가 맞지 않는 값은 계산 이전에 걸러지지만, 길이가 겹치는 구간에서는 조용히 잘못된 판정이 나옵니다. 그래서 각 체계마다 대표 시험 값을 두고, 새 값을 넣을 때마다 두 체계의 결과가 모두 기록되는지 확인하는 관행이 도움이 됩니다.

이어서 살펴볼 것은 조회 결과가 비어 있는 경우의 해석입니다. 계산을 통과한 값이 등록 자료에서 발견되지 않을 수 있습니다. 이 경우 확인되지 않았다는 사실과 존재하지 않는다는 판단은 다릅니다. 등록 자료가 갱신 중이거나 조회 범위가 제한적일 수 있고, 최근 발급된 값이 아직 반영되지 않았을 수도 있습니다.

그래서 조회 결과는 판정과 분리해 다루는 편이 좋습니다. 계산 결과는 값의 성립 여부를 말하고, 조회 결과는 그 시점의 자료에 있는지를 말합니다. 두 결과를 한 문장으로 합치면 사용자는 조회 실패를 번호의 오류로 읽게 됩니다. 화면에는 두 줄로 나눠 보여주고, 조회가 실패한 경우에는 다시 시도할 수 있는 경로를 함께 제공하는 편이 낫습니다.

개발자를 위한 메모: 입력과 저장

  • 하이픈과 공백을 먼저 제거하고, 문자를 대문자로 통일한 뒤 계산합니다. 대소문자 처리 규칙을 흐리면 같은 값이 다른 판정을 받습니다.
  • 마지막 자리에 문자를 허용하되, 허용되는 문자는 정해진 하나로 제한합니다. 아무 문자나 받으면 다른 오류가 섞여 들어옵니다.
  • 두 도서 체계를 구분하는 판단을 검증 함수 바깥에 둡니다. 계산 함수는 매개변수만 받게 하면 시험이 쉬워집니다.
  • 중간에 빠진 자리를 채워 넣는 보정을 하지 않습니다. 추측으로 값을 만들어 내면 검증의 의미가 사라집니다.
  • 조회용 키는 하이픈 없는 형태로 통일하고, 표시용 형식은 화면에서 다시 만듭니다.

이 글의 번호 예시는 계산 순서를 설명하기 위해 구성한 가상의 값이며, 실제로 발행된 책이나 간행물을 가리키지 않습니다. 검증값의 일치 여부는 출판물의 실존이나 권리 관계와 무관하며, 그 근거로 사용할 수 없습니다.

다음 단계

문자로 끝나는 값과 숫자로 끝나는 값을 번호 검증 도구에 넣어 판정이 어떻게 달라지는지 확인해 보세요. 가중치를 번갈아 적용하는 다른 사례는 상품 바코드의 체크 디지트에서 이어집니다.

이어 읽기

카드번호·신분증번호 검증기 관련 글