Twooutoffive code
In telecommunication, a twooutoffive code is an m of n code that provides exactly ten possible combinations, and thus is popular for representing decimal digits using five bits. There are ways to assign weights to each bit such that the set bits sum to the desired value, with an exception for zero.
According to Federal Standard 1037C:
 each decimal digit is represented by a binary numeral consisting of five bits of which two are of one kind, called "ones," and three are of the other kind, called "zeros", and
 the usual weights assigned to the bit positions are 01236. However, in this scheme, zero is encoded as "binary" 01100; strictly speaking the 01236 previously claimed is just a mnemonic device.[1]
The weights give a unique encoding for most digits, but allow two encodings for 3: 0+3 or 10010 and 1+2 or 01100. The former is used to encode the digit 3, and the latter is used to represent the otherwise unrepresentable zero.
The IBM 7070, IBM 7072, and IBM 7074 computers used this code to represent each of the ten decimal digits in a machine word, although they numbered the bit positions 01234, rather than with weights. Each word also had a sign flag, encoded using a twooutofthree code, that could be A Alphanumeric, − Minus, or + Plus. When copied to a digit, the three bits were placed in bit positions 034. (Thus producing the numeric values 3, 6 and 9, respectively.)
A variant is the U.S. Post Office POSTNET barcode, used to represent the ZIP+4 code for automated mail sorting and routing equipment. This uses two tall bars as "ones" and three short bars as "zeros". Here, the weights assigned to the bit positions are 74210. Again, zero is encoded specially, using the 7+4 combination (binary 11000) that would naturally encode 11. This method was also used in North American telephone Multifrequency and crossbar switching systems.
The USPS Postal Alpha Numeric Encoding Technique (PLANET) uses the same weights, but with the opposite barheight convention.
The Code 39 barcode uses weights 12470 (i.e. LSB first, Parity bit last) for the widths of its bars, but it also encodes two bits of extra information in the spacing between bars. The   spacing is used for digits.
The following table represents decimal digits from 0 to 9 in various twooutoffive code systems:
Digit  Telecommunication 01236 
POSTNET 74210 
PLANET  Code39 bar widths 12470 

1  11000  00011 
┃┃┃╻╻  ▮    ▮ 
2  10100  00101 
┃┃╻┃╻   ▮   ▮ 
3  10010  00110 
┃┃╻╻┃  ▮ ▮    
4  01010  01001 
┃╻┃┃╻    ▮  ▮ 
5  00110  01010 
┃╻┃╻┃  ▮  ▮   
6  10001  01100 
┃╻╻┃┃   ▮ ▮   
7  01001  10001 
╻┃┃┃╻     ▮ ▮ 
8  00101  10010 
╻┃┃╻┃  ▮   ▮  
9  00011  10100 
╻┃╻┃┃   ▮  ▮  
0  01100  11000 
╻╻┃┃┃    ▮ ▮  
A  1––10  IBM 707x Sign flags  
−  1––01  
+  0––11  
Digit  01234 IBM 707x 
The limit on the number of bits set is similar to, but strictly stronger than, a parity check. All constantweight codes, including the twooutoffive code, can not only detect any singlebit error, but also detect any unidirectional errors  any case where all errors in a codeword are of a single type (0→1 or 1→0).
References

This article incorporates public domain material from the General Services Administration document "Federal Standard 1037C".