S10 (UPU standard)


The UPU S10 standard defines a system for assigning 13-character identifiers to international postal items for the purpose of tracking and tracing them during shipping.
The identifiers consist of a two letter service indicator code, an eight digit serial number, a single check-digit, and a two-letter ISO country code—the latter identifying the issuing postal administration's country.
With increased liberalization and the possibility of multiple postal services operating in the same country, the use of country codes to designate the postal service is a problem. To solve this, each country has a designated postal service that controls all S10 identifiers from that country; any competing postal services will have to cooperate with the designated owner. The organization assigned by the UPU member country shall manage the issue and use of S10 identifiers, among all the operators under the authority of that UPU member country, in such a way as to ensure that no S10 identifier is reused within a period of 12 calendar months. A period of 24 calendar months, or longer, is recommended.

Service indicator codes

Check-digit calculation

Ignore the Service Indicator Code and Country Code
Assign the weights 8, 6, 4, 2, 3, 5, 9, 7 to the 8 digits, from left to right
Calculate S, the sum of each digit multiplied by its weight.
For example, for the number 47312482, S = 4*8 + 7*6 + 3*4 + 1*2 + 2*3 + 4*5 + 8*9 + 2*7 = 200
Calculate the check digit, C, from C = 11 -
If C = 10, change to C = 0
If C = 11, change to C = 5
For the example 47312482 C = 11 - = 11 - 2 = 9.

Python code for check-digit calculation

For Python 3.6 or later:

def get_check_digit:
"""Get S10 check digit."""
weights =
sum = 0
for i, digit in enumerate:
sum += weights * int
sum = 11 -
if sum 10:
sum = 0
elif sum 11:
sum = 5
return sum

JavaScript code for check-digit calculation


function getCheckDigit