# UPC-E
UPC-E là một biến thể của UPC-A cho phép tạo ra các mã vạch gọn gàng hơn bằng cách loại bỏ bớt các số 0 "dư thừa". Do vậy tạo ra mã vạch của UPC-E có kích thước chiều rộng chỉ cỡ một nửa kích thước ấy của mã vạch UPC-A (với cùng một mật độ in ấn), UPC-E nói chung được sử dụng trên các bao gói hàng hóa có kích thước nhỏ khi mã vạch của UPC-A không thể đưa vào được.

## Chuyển UPC-A thành UPC-E
Không phải chuỗi số 12 số nào của UPC-A cũng có thể chuyển sang UPC-E. Chỉ có một số chuỗi có khả năng chuyển đổi đó. Quy tắc như sau:
1. Nếu mã nhà sản xuất (5 số) kết thúc với chuỗi "000", "100" hay "200" thì chuỗi số của UPC-E sẽ bao gồm 2 chữ số đầu tiên của mã nhà sản xuất + ba số cuối của mã sản phẩm được thay vào vị trí của chuỗi bị loại bỏ, tiếp theo là số thứ ba trong mã nhà sản xuất. Mã sản phẩm phải nằm trong khoảng 00000 đến 00999.
2. Nếu mã nhà sản xuất kết thúc bởi chuỗi "00", nhưng không phải các trường hợp liệt kê trong mục #1 nói trên, chuỗi số của UPC-E bao gồm ba chữ số đầu của mã nhà sản xuất + hai chữ số cuối của mã sản phẩm + chuỗi số "3". Mã sản phẩm phải nằm trong khoảng 00000 đến 00099.
3. Nếu mã nhà sản xuất kết thúc bởi chuỗi "0", nhưng không rơi vào các trường hợp đã nói ở các mục #1 hay #2 nói trên, chuỗi số của UPC-E sẽ bao gồm 4 chữ số đầu tiên của mã nhà sản xuất + chữ số cuối của mã sản phẩm + chuỗi số "4". Mã sản phẩm phải nằm trong khoảng 00000 đến 00009.
4. Nếu mã nhà sản xuất không có số 0 nào, chuỗi số của UPC-E sẽ bao gồm toàn bộ 5 chữ số của mã nhà sản xuất và số cuối cùng của mã sản phẩm. Mã sản phẩm phải nằm trong khoảng từ 00005 đến 00009.

Sau khi thực hiện xong việc chuyển đổi các mã nhà sản xuất và mã sản phẩm của UPC-A thành chuỗi số của UPC-E gồm 6 số, người ta bổ sung vào trước chuỗi này số hệ thống (0 hoặc 1) và vào sau chuỗi này số kiểm tra đã tính từ trước của UPC-A. Như vậy chuỗi số hoàn chỉnh của UPC-E như sau:
Số hệ thống + Chuỗi 6 số đã biến đổi + Số kiểm tra của UPC-A.
Quy tắc này được liệt kê trong bảng dưới đây:
| UPC-A       | UPC-E  | Ví dụ UPC-A | Ví dụ UPC-E | Ghi chú      |
| ----------- | ------ | ----------- | ----------- | ------------ |
| AB000-00HIJ | ABHIJ0 | 12000-00456 | 124560      |              |
| AB100-00HIJ | ABHIJ1 | 12100-00456 | 124561      |              |
| AB200-00HIJ | ABHIJ2 | 12200-00456 | 124563      |              |
| ABC00-000IJ | ABCIJ3 | 12300-00045 | 123453      | C từ 3 đến 9 |
| ABCD0-0000J | ABCDJ4 | 12340-00005 | 123454      |              |
| ABCDE-0000J | ABCDEJ | 12345-00005 | 123455      | J từ 5 đến 9 |


## Cấu trúc vật lý
Quy ước: Các bit có giá trị 1 được in bằng mực đen thành một đường thẳng đứng, các bit có giá trị 0 không được in (hoặc được in bằng mực trắng) thành một đường thẳng đứng có cùng độ rộng với bit có giá trị 1.
Mã vạch UPC-E có cấu trúc vật lý như sau:
- Vùng lặng trước
- Các vạch bảo vệ trái, có giá trị nhị phân 101.
- Mã hóa nhị phân của 6 số đã chuyển hóa từ chuỗi 10 số bao gồm nhà sản xuất và mã sản phẩm. Việc mã hóa này cũng tuân theo quy tắc chẵn lẻ và phụ thuộc vào giá trị của số kiểm tra và số hệ thống. Quy tắc này được liệt kê dưới đây.
- Các vạch bảo vệ phải, có giá trị nhị phân 010101.
- Vùng lặng sau.


## Quy tắc chẵn lẻ với số kiểm tra
Bảng dưới đây viết tắt với C là chẵn, L là lẻ.
| Số kiểm tra | Số hệ thống 0 | Số hệ thống 1 |
| ----------- | ------------- | ------------- |
| 0           | CCCLLL        | LLLCCC        |
| 1           | CCLCLL        | LLCLCC        |
| 2           | CCLLCL        | LLCCLC        |
| 3           | CCLLLC        | LLCCCL        |
| 4           | CLCCLL        | LCLLCC        |
| 5           | CLLCCL        | LCCLLC        |
| 6           | CLLLCC        | LCCCLL        |
| 7           | CLCLCL        | LCLCLC        |
| 8           | CLCLLC        | LCLCCL        |
| 9           | CLLCLC        | LCCLCL        |


## Các giá trị nhị phân theo chẵn lẻ
Chuỗi mã hóa nhị phân theo chẵn hay lẻ của các giá trị số từ 0 đến 9 được liệt kê trong bảng sau:
| Giá trị số | Lẻ      | Chẵn    |
| ---------- | ------- | ------- |
| 0          | 0001101 | 0100111 |
| 1          | 0011001 | 0110011 |
| 2          | 0010011 | 0011011 |
| 3          | 0111101 | 0100001 |
| 4          | 0100011 | 0011101 |
| 5          | 0110001 | 0111001 |
| 6          | 0101111 | 0000101 |
| 7          | 0111011 | 0010001 |
| 8          | 0110111 | 0001001 |
| 9          | 0001011 | 0010111 |


## In ấn
Thông thường đối với UPC-E, người ta in các vạch bảo vệ dài hơn so với các vạch của 6 số được mã hóa về phía dưới. Sáu số này in ở dưới phần các vạch của chúng. Số hệ thống in ở góc bên trái, phía dưới và trước các vạch bảo vệ trái. Số kiểm tra được in ở góc bên phải, phía dưới và sau các vạch bảo vệ phải. Tám số này có mục đích để người bán (hay kiểm kê) hàng có thể nhập dữ liệu bằng tay khi vì một lý do nào đó mà máy quét không đọc được dữ liệu đã mã hóa trong các vạch.

## Ví dụ
Giả sử cần chuyển đổi chuỗi số UPC-A "123456000087" sang chuỗi UPC-E. (Quy tắc tính số kiểm tra: xem thêm bài UPC-A#Quy tắc tính
Tách chuỗi số này thành 4 phần.
1. Số hệ thống bằng 1.
2. Mã nhà sản xuất 23456.
3. Mã sản phẩm 00008.
4. Số kiểm tra 7.

Hai chuỗi số mã nhà sản xuất và mã sản phẩm phù hợp cho việc chuyển đổi sang UPC-E và giá trị của chuỗi UPC-E được tạo ra bằng "234568" (xem phần Chuyển UPC-A thành UPC-E trên đây). Do vậy chuỗi mã vạch UPC-E hoàn chỉnh là "12345687".
Áp dụng quy tắc chẵn lẻ cho số kiểm tra bằng 7 và số hệ thống bằng 1 ta có chuỗi mã hóa của 6 số sẽ là: LCLCLC. Do vậy chuỗi số 234568 sẽ được mã hóa như sau:
1. Số thứ nhất có giá trị bằng 2, mã hóa theo tính lẻ, có giá trị nhị phân là 0010011.
2. Số thứ hai có giá trị bằng 3, mã hóa theo tính chẵn, có giá trị nhị phân là 0100001.
3. Số thứ ba có giá trị bằng 4, mã hóa theo tính lẻ, có giá trị nhị phân là 0100011.
4. Số thứ tư có giá trị bằng 5, mã hóa theo tính chẵn, có giá trị nhị phân là 0111001.
5. Số thứ năm có giá trị bằng 6, mã hóa theo tính lẻ, có giá trị nhị phân là 0101111.
6. Số thứ sáu có giá trị bằng 8, mã hóa theo tính chẵn, có giá trị nhị phân là 0001001.