{{위키데이터 속성 추적}}
{{기계 번역|날짜=2019-03-15}}
[[파일:Code_39_Barcode_Example.png|오른쪽|섬네일|162x162픽셀| 코드 39 바코드 라벨 ]]
[[파일:Code_3_of_9.svg|오른쪽|섬네일|262x262픽셀| Code 39로 변환한 * WIKIPEDIA * ]]
'''코드 39'''는 가변 길이의 개별 [[바코드]]다.

코드 39는 대문자 (A ~ Z), 숫자 (0-9) 및 특수 문자 (-,., $, /, +, % 및 [[공백 문자|공백]] )로, 총 43자로 구성된다.  추가 글자( '*'로 표시됨)는 시작 구분 기호와 종료 구분 문자 모두에 사용된다.  각 문자는 9 개의 요소로 구성된다 : 5 개의 막대와 4 개의 공백. 각 문자의 9 개 요소 중 3 개는 넓고 (2 진 값 1) 6 개 요소는 좁다. (2 진 값 0) 너비와 너비 간의 너비 비율은 중요하지 않으며 1 : 2에서 1 : 3 사이에서 선택할 수 있다.

바코드 자체에는 확인 숫자가 포함되지 않지만 (코드 128과 대조적으로), 잘못 해석된 단일 막대가 다른 유효한 문자를 생성할 수 없다는 이유로 자체 검사로 간주될 수 있다.  코드 39의 가장 심각한 단점은 낮은 데이터 밀도다. 예를 들어 코드 128보다 코드 39에서 데이터를 인코딩하는 데 더 많은 공간이 필요하다. 즉, 아주 작은 제품에는 코드 39 기반 바코드로 레이블을 지정할 수 없다. 그러나, 비록 코드 39는 여전히 몇몇 우편 서비스에 의해 사용된다. ([[만국 우편 연합]]은 모든 경우에 코드 (128)를 사용할 것을 권장하고,<ref>As one example of an international standard, see {{웹 인용|url=http://pls.upu.int/document/2011/an/cep_c_4_gn_ep_4-1/src/d008_ad00_an01_p00_r00.pdf|제목=Identification of postal items &ndash; 13-character identifier|날짜=28 October 2010|출판사=[[Universal Postal Union]]}}{{깨진 링크|url=http://pls.upu.int/document/2011/an/cep_c_4_gn_ep_4-1/src/d008_ad00_an01_p00_r00.pdf }}</ref> ) 거의 모든 바코드 리더로 디코드할 수 있다. 코드 39의 장점 중 하나는 체크 디지트를 생성할 필요가 없기 때문에 바코드 글꼴을 시스템이나 프린터에 추가한 다음 해당 글꼴로 데이터를 인쇄하여 기존 인쇄 시스템에 쉽게 통합할 수 있다는 것이다.
Code 39는 1974년 David Allais 와 Intermec의 Ray Stevens가 개발했다. 그들의 원래 디자인은 두 개의 넓은 막대와 각 문자에 하나의 넓은 공간을 포함하여 40 개의 가능한 문자를 만들었다. 이 문자 중 하나를 시작 및 중단 패턴으로 남겨두면 39 자가 남았다. 이 문자는 Code 39라는 이름의 기원이었다.<ref>{{저널 인용|제목=AIDC Memoirs|성=Allais, D. C.|url=http://aidc100.org/files/Allais-_David_Memoirs.pdf|연도=2006|형식=PDF|확인날짜=2019-03-14|보존url=https://web.archive.org/web/20130126112426/http://aidc100.org/files/Allais-_David_Memoirs.pdf|보존날짜=2013-01-26|url-status=dead}}</ref>  나중에 4 개의 구두점 문자가 추가되어 넓은 막대와 3 개의 넓은 공백을 사용하지 않고 문자 세트를 43 자로 확장했다.  Code 39는 나중에 [[미국 국가표준 협회|ANSI]] MH 10.8 M-1983 및 MIL-STD-1189로 표준화되었다.<ref>{{웹 인용|url=https://assist.daps.dla.mil/quicksearch/basic_profile.cfm?ident_number=36123|제목=MIL-STD-1189 Standard Department of Defense Barcode Symbology|날짜=1989-08-10|확인날짜=2010-07-22|보존url=https://web.archive.org/web/20110722223332/https://assist.daps.dla.mil/quicksearch/basic_profile.cfm?ident_number=36123|보존날짜=2011-07-22|url-status=dead}}</ref>  그리고 MIL-STD-1189는 취소되고 ANSI / AIM BC1 / 1995, 통일 기호 표준 - 코드 39로 대체되었다.<ref>{{웹 인용|url=http://www.dscp.dla.mil/subs/support/specs/crds/milstan.asp|제목=Adoption Notice: AIM/BC1 Uniform Symbology Specification|날짜=1997-06-19|보존url=https://web.archive.org/web/20110927231714/http://www.dscp.dla.mil/subs/support/specs/crds/milstan.asp|보존날짜=2011-09-27|url-status=dead|확인날짜=2011-04-06}}</ref>

== 인코딩 ==
아래 표시된 '''*''' 문자는 실제 인코딩 가능 문자는 아니지만 코드 39의 시작 및 중지 기호다. 기호의 비대칭성은 판독기로 하여금 스캔되는 바코드의 방향을 결정하게 한다. 이 코드는 전통적으로 바코드 글꼴의 '*' 문자에 매핑되며 바코드와 함께 사람이 읽을 수 있는 표현으로 표시된다.
[[파일:Free_3_of_9_(Code_39_barcode).svg|섬네일| 코드 39 문자 ]]
일반적으로 두 개의 넓은 막대의 위치는 1에서 10 사이의 숫자를 인코딩하는 것으로 간주될 수 있으며 넓은 공간의 위치 (네 개의 가능한 위치가 있음)는 문자를 네 개의 그룹 중 하나로 분류하는 것으로 간주될 수 있습니다 ( 왼쪽에서 오른쪽으로) : 문자 (+30) (U-Z), 숫자 (+0) (1-9,0), 문자 (+10) (A-J) 및 문자 (+20) 티).  예를 들어, 문자 P (알파벳의 16 번째 문자)는 숫자 6을 나타내기 위해 막대가 정렬되어 있고 맨 오른쪽 위치의 공백은 그룹 문자 (+20)를 선택한다.

숫자로 표현 될 때 숫자 "10"은 숫자 0을 인코딩하는 데 사용된다.  왜냐면 문자 (+ 30) 그룹에는 문자가 6 개 (문자 30-35 또는 U-Z)이므로 이 그룹의 나머지 4 개 위치 (36-39)는 대시, 마침표, 공백 )뿐만 아니라 시작 및 정지 문자이기 때문이다.

5 개의 가능한 위치 중 두 개의 넓은 막대는 1, 2, 4, 7, 0의 숫자 동등성을 갖는 2의 5 코드를 사용하여 1에서 10 사이의 숫자를 인코딩한다.  숫자는 합산된다. 예를 들어, 숫자 6은 2와 4 (2 + 4 = 6)의 위치를 차지하는 넓은 막대와 함께 NWWNN으로 인코딩된다.  NNWWN이 {{개행 금지|1=4+7 = 11}} 경우 숫자 (+0)는 0, 문자 열 (+10 - +30)은 10으로 지정된다.  (+10에서 +30) 글자를 인코딩 할 때 방정식에 "-1"이 필요하므로 표에 표시된 대로 'A'는 WNNNW → 1 + 10-1 → 10이다.

마지막 네 문자는 모든 좁은 막대와 세 개의 넓은 공백으로 구성된다. 좁은 단일 공간에는 4 가지 위치가 있다.

이 표에는 Code 39 사양이 요약되어 있다. 각 문자에 할당된 숫자 값 (시작 및 정지 제외)은 아래 설명된 [[체크섬]](checksum) 알고리즘에서 사용된다.
{| class="wikitable"
|+Code 39 글자들 (그리고 checksum 값)
! colspan="2" rowspan="2" |Bars
! colspan="12" |Spaces
|-
! colspan="2" |&#x7C;&#x7C; &#x7C;&#x7C;&#x7C;
!+0
! colspan="2" |&#x7C;&#x7C;&#x7C; &#x7C;&#x7C;
!+10
! colspan="2" |&#x7C;&#x7C;&#x7C;&#x7C; &#x7C;
!+20
! colspan="2" |&#x7C; &#x7C;&#x7C;&#x7C;&#x7C;
!+30
|-
!▮&#x7C;&#x7C;&#x7C;▮
!1
|▮&#x7C; &#x7C;&#x7C;▮
|1
|1
|▮&#x7C;&#x7C; &#x7C;▮
|A
|10
|▮&#x7C;&#x7C;&#x7C; ▮
|K
|20
|▮ &#x7C;&#x7C;&#x7C;▮
|U
|30
|-
!&#x7C;▮&#x7C;&#x7C;▮
!2
|&#x7C;▮ &#x7C;&#x7C;▮
|2
|2
|&#x7C;▮&#x7C; &#x7C;▮
|B
|11
|&#x7C;▮&#x7C;&#x7C; ▮
|L
|21
|&#x7C; ▮&#x7C;&#x7C;▮
|V
|31
|-
!▮▮&#x7C;&#x7C;&#x7C;
!3
|▮▮ &#x7C;&#x7C;&#x7C;
|3
|3
|▮▮&#x7C; &#x7C;&#x7C;
|C
|12
|▮▮&#x7C;&#x7C; &#x7C;
|M
|22
|▮ ▮&#x7C;&#x7C;&#x7C;
|W
|32
|-
!&#x7C;&#x7C;▮&#x7C;▮
!4
|&#x7C;&#x7C; ▮&#x7C;▮
|4
|4
|&#x7C;&#x7C;▮ &#x7C;▮
|D
|13
|&#x7C;&#x7C;▮&#x7C; ▮
|N
|23
|&#x7C; &#x7C;▮&#x7C;▮
|X
|33
|-
!▮&#x7C;▮&#x7C;&#x7C;
!5
|▮&#x7C; ▮&#x7C;&#x7C;
|5
|5
|▮&#x7C;▮ &#x7C;&#x7C;
|E
|14
|▮&#x7C;▮&#x7C; &#x7C;
|O
|24
|▮ &#x7C;▮&#x7C;&#x7C;
|Y
|34
|-
!&#x7C;▮▮&#x7C;&#x7C;
!6
|&#x7C;▮ ▮&#x7C;&#x7C;
|6
|6
|&#x7C;▮▮ &#x7C;&#x7C;
|F
|15
|&#x7C;▮▮&#x7C; &#x7C;
|P
|25
|&#x7C; ▮▮&#x7C;&#x7C;
|Z
|35
|-
!&#x7C;&#x7C;&#x7C;▮▮
!7
|&#x7C;&#x7C; &#x7C;▮▮
|7
|7
|&#x7C;&#x7C;&#x7C; ▮▮
|G
|16
|&#x7C;&#x7C;&#x7C;▮ ▮
|Q
|26
|&#x7C; &#x7C;&#x7C;▮▮
| -
|36
|-
!▮&#x7C;&#x7C;▮&#x7C;
!8
|▮&#x7C; &#x7C;▮&#x7C;
|8
|8
|▮&#x7C;&#x7C; ▮&#x7C;
|H
|17
|▮&#x7C;&#x7C;▮ &#x7C;
|R
|27
|▮ &#x7C;&#x7C;▮&#x7C;
|.
|37
|-
!&#x7C;▮&#x7C;▮&#x7C;
!9
|&#x7C;▮ &#x7C;▮&#x7C;
|9
|9
|&#x7C;▮&#x7C; ▮&#x7C;
|I
|18
|&#x7C;▮&#x7C;▮ &#x7C;
|S
|28
|&#x7C; ▮&#x7C;▮&#x7C;
|[[공백 문자|␣]]
|38
|-
!&#x7C;&#x7C;▮▮&#x7C;
!10
|&#x7C;&#x7C; ▮▮&#x7C;
|0
|0
|&#x7C;&#x7C;▮ ▮&#x7C;
|J
|19
|&#x7C;&#x7C;▮▮ &#x7C;
|T
|29
|&#x7C; &#x7C;▮▮&#x7C;
|*
|
|-
! colspan="14" |
|-
!&#x7C;&#x7C;&#x7C;&#x7C;&#x7C;
!
|&#x7C; &#x7C;&#x7C; &#x7C; &#x7C;
| +
|41
|&#x7C; &#x7C; &#x7C;&#x7C; &#x7C;
|/
|40
|&#x7C; &#x7C; &#x7C; &#x7C;&#x7C;
|$
|39
|&#x7C;&#x7C; &#x7C; &#x7C; &#x7C;
|%
|42
|}
문자는 좁은 공간으로 구분된다. 예를 들어, 실제로 시작을 포함하고 문자를 중지 단일 문자 "A"의 전체 인코딩 "* A *"이며, {{개행 금지|"&#124; &#124;▮▮&#124;▮&#124;&#124; &#124;▮&#124; &#124;▮▮&#124;"}} ▮ | | ▮▮ | {{개행 금지|"&#124; &#124;▮▮&#124;▮&#124;&#124; &#124;▮&#124; &#124;▮▮&#124;"}} 이러한 문자 간 스페이스가 없으면 코드를 제대로 읽을 수 없다.  바코드 글꼴은 문자의 글리프 내에 항상 이 공간을 포함한다.

== 코드 39와 mod 43 ==
코드 39는 선택적 모듈로 43 [[체크섬]]과 함께 사용되기도 한다. 이 기능을 사용하려면 이 기능을 바코드 인식기에서 활성화해야 한다. 체크 숫자가 있는 코드를 ''코드 39 mod 43'' 이라고 한다.

이를 계산하기 위해 각 문자에 하나의 값이 할당된다. 할당은 위의 표에 나열되어 있지만 거의 체계적이지는 않다.

다음은 [[체크섬]] 계산을 수행하는 방법이다.

* 시작 및 종료 코드를 제외한 바코드의 각 문자 값 (0 - 42)을 가져온다.
* 값을 합한다.
* 결과를 43으로 나눈다.
* 나머지는 추가할 체크섬 문자의 값이다.

== 전체 ASCII 코드 39 ==
코드 39는 43 자로 제한된다.  전체 [[ASCII]] 코드 39 기호 0-9, AZ, ".", "-"및 공백은 코드 39의 해당 표현과 동일하다. 소문자, 추가 구두점 문자 및 제어 문자는 코드 39의 두 문자 시퀀스로 나타낸다.
{|
| colspan="15" style="text-align:center" |'''Code Details'''
|- style="background:#C0C0C0"
|숫자
|글자
|인코딩
| style="background:#FFFFFF" |   
|숫자
|글자
|인코딩
| style="background:#FFFFFF" |   
|숫자
|글자
|인코딩
| style="background:#FFFFFF" |   
|숫자
|글자
|인코딩
|- style="background:#F0F0F0"
|0
|NUL
|%U
| style="background:#FFFFFF" |   
|32
|[space]
|[space]
| style="background:#FFFFFF" |   
|64
|@
|%V
| style="background:#FFFFFF" |   
|96
|`
|%W
|- style="background:#F0F0F0"
|1
|SOH
|$A
| style="background:#FFFFFF" |   
|33
|!
|/A
| style="background:#FFFFFF" |   
|65
|A
|A
| style="background:#FFFFFF" |   
|97
|a
| +A
|- style="background:#F0F0F0"
|2
|STX
|$B
| style="background:#FFFFFF" |   
|34
|"
|/B
| style="background:#FFFFFF" |   
|66
|B
|B
| style="background:#FFFFFF" |   
|98
|b
| +B
|- style="background:#F0F0F0"
|3
|ETX
|$C
| style="background:#FFFFFF" |   
|35
|#
|/C
| style="background:#FFFFFF" |   
|67
|C
|C
| style="background:#FFFFFF" |   
|99
|c
| +C
|- style="background:#F0F0F0"
|4
|EOT
|$D
| style="background:#FFFFFF" |   
|36
|$
|/D
| style="background:#FFFFFF" |   
|68
|D
|D
| style="background:#FFFFFF" |   
|100
|d
| +D
|- style="background:#F0F0F0"
|5
|ENQ
|$E
| style="background:#FFFFFF" |   
|37
|%
|/E
| style="background:#FFFFFF" |   
|69
|E
|E
| style="background:#FFFFFF" |   
|101
|e
| +E
|- style="background:#F0F0F0"
|6
|ACK
|$F
| style="background:#FFFFFF" |   
|38
|&
|/F
| style="background:#FFFFFF" |   
|70
|F
|F
| style="background:#FFFFFF" |   
|102
|f
| +F
|- style="background:#F0F0F0"
|7
|BEL
|$G
| style="background:#FFFFFF" |   
|39
|'
|/G
| style="background:#FFFFFF" |   
|71
|G
|G
| style="background:#FFFFFF" |   
|103
|g
| +G
|- style="background:#F0F0F0"
|8
|BS
|$H
| style="background:#FFFFFF" |   
|40
|(
|/H
| style="background:#FFFFFF" |   
|72
|H
|H
| style="background:#FFFFFF" |   
|104
|h
| +H
|- style="background:#F0F0F0"
|9
|HT
|$I
| style="background:#FFFFFF" |   
|41
|)
|/I
| style="background:#FFFFFF" |   
|73
|I
|I
| style="background:#FFFFFF" |   
|105
|i
| +I
|- style="background:#F0F0F0"
|10
|LF
|$J
| style="background:#FFFFFF" |   
|42
|*
|/J
| style="background:#FFFFFF" |   
|74
|J
|J
| style="background:#FFFFFF" |   
|106
|j
| +J
|- style="background:#F0F0F0"
|11
|VT
|$K
| style="background:#FFFFFF" |   
|43
| +
|/K
| style="background:#FFFFFF" |   
|75
|K
|K
| style="background:#FFFFFF" |   
|107
|k
| +K
|- style="background:#F0F0F0"
|12
|FF
|$L
| style="background:#FFFFFF" |   
|44
|,
|/L
| style="background:#FFFFFF" |   
|76
|L
|L
| style="background:#FFFFFF" |   
|108
|l
| +L
|- style="background:#F0F0F0"
|13
|CR
|$M
| style="background:#FFFFFF" |   
|45
| -
| -
| style="background:#FFFFFF" |   
|77
|M
|M
| style="background:#FFFFFF" |   
|109
|m
| +M
|- style="background:#F0F0F0"
|14
|SO
|$N
| style="background:#FFFFFF" |   
|46
|.
|.
| style="background:#FFFFFF" |   
|78
|N
|N
| style="background:#FFFFFF" |   
|110
|n
| +N
|- style="background:#F0F0F0"
|15
|SI
|$O
| style="background:#FFFFFF" |   
|47
|/
|/O
| style="background:#FFFFFF" |   
|79
|O
|O
| style="background:#FFFFFF" |   
|111
|o
| +O
|- style="background:#F0F0F0"
|16
|DLE
|$P
| style="background:#FFFFFF" |   
|48
|0
|0
| style="background:#FFFFFF" |   
|80
|P
|P
| style="background:#FFFFFF" |   
|112
|p
| +P
|- style="background:#F0F0F0"
|17
|DC1
|$Q
| style="background:#FFFFFF" |   
|49
|1
|1
| style="background:#FFFFFF" |   
|81
|Q
|Q
| style="background:#FFFFFF" |   
|113
|q
| +Q
|- style="background:#F0F0F0"
|18
|DC2
|$R
| style="background:#FFFFFF" |   
|50
|2
|2
| style="background:#FFFFFF" |   
|82
|R
|R
| style="background:#FFFFFF" |   
|114
|r
| +R
|- style="background:#F0F0F0"
|19
|DC3
|$S
| style="background:#FFFFFF" |   
|51
|3
|3
| style="background:#FFFFFF" |   
|83
|S
|S
| style="background:#FFFFFF" |   
|115
|s
| +S
|- style="background:#F0F0F0"
|20
|DC4
|$T
| style="background:#FFFFFF" |   
|52
|4
|4
| style="background:#FFFFFF" |   
|84
|T
|T
| style="background:#FFFFFF" |   
|116
|t
| +T
|- style="background:#F0F0F0"
|21
|NAK
|$U
| style="background:#FFFFFF" |   
|53
|5
|5
| style="background:#FFFFFF" |   
|85
|U
|U
| style="background:#FFFFFF" |   
|117
|u
| +U
|- style="background:#F0F0F0"
|22
|SYN
|$V
| style="background:#FFFFFF" |   
|54
|6
|6
| style="background:#FFFFFF" |   
|86
|V
|V
| style="background:#FFFFFF" |   
|118
|v
| +V
|- style="background:#F0F0F0"
|23
|ETB
|$W
| style="background:#FFFFFF" |   
|55
|7
|7
| style="background:#FFFFFF" |   
|87
|W
|W
| style="background:#FFFFFF" |   
|119
|w
| +W
|- style="background:#F0F0F0"
|24
|CAN
|$X
| style="background:#FFFFFF" |   
|56
|8
|8
| style="background:#FFFFFF" |   
|88
|X
|X
| style="background:#FFFFFF" |   
|120
|x
| +X
|- style="background:#F0F0F0"
|25
|EM
|$Y
| style="background:#FFFFFF" |   
|57
|9
|9
| style="background:#FFFFFF" |   
|89
|Y
|Y
| style="background:#FFFFFF" |   
|121
|y
| +Y
|- style="background:#F0F0F0"
|26
|SUB
|$Z
| style="background:#FFFFFF" |   
|58
| :
|/Z
| style="background:#FFFFFF" |   
|90
|Z
|Z
| style="background:#FFFFFF" |   
|122
|z
| +Z
|- style="background:#F0F0F0"
|27
|ESC
|%A
| style="background:#FFFFFF" |   
|59
|;
|%F
| style="background:#FFFFFF" |   
|91
|[
|%K
| style="background:#FFFFFF" |   
|123
|{
|%P
|- style="background:#F0F0F0"
|28
|FS
|%B
| style="background:#FFFFFF" |   
|60
|<
|%G
| style="background:#FFFFFF" |   
|92
|\
|%L
| style="background:#FFFFFF" |   
|124
|&#x7C;
|%Q
|- style="background:#F0F0F0"
|29
|GS
|%C
| style="background:#FFFFFF" |   
|61
|=
|%H
| style="background:#FFFFFF" |   
|93
|]
|%M
| style="background:#FFFFFF" |   
|125
| }
|%R
|- style="background:#F0F0F0"
|30
|RS
|%D
| style="background:#FFFFFF" |   
|62
|>
|%I
| style="background:#FFFFFF" |   
|94
|^
|%N
| style="background:#FFFFFF" |   
|126
|~
|%S
|- style="background:#F0F0F0"
|31
|US
|%E
| style="background:#FFFFFF" |   
|63
|?
|%J
| style="background:#FFFFFF" |   
|95
|_
|%O
| style="background:#FFFFFF" |   
|127
|DEL
|%T, %X, %Y, %Z
|}

== 각주 ==
{{각주}}

[[분류:바코드]]