The IMO number
Seven digits, assigned once, and they stay with the hull until she is broken up. Her name will change, her flag will change, her owners will change several times over. The IMO number does not, which is what makes it the only field on a vessel record worth keying anything on.
What the number actually is
It is issued under the IMO Ship Identification Number Scheme, assigned to a hull rather than to a company, a registration or a radio set. Once issued it is never reissued to another ship, not even decades after the first one is scrapped. That is the whole property being bought: a fixture recorded in 2009 still resolves to exactly one hull today, whatever she is called now and whoever trades her.
It survives renaming, reflagging, sale, a change of technical or commercial manager, a
change of classification society, and conversion from one trade to another. Written out in
full it usually carries a prefix, IMO 9074729, and the prefix is not part of the
number.
The name is the opposite kind of thing. A name is a label the current owner chooses, reuses and repeats, and the register shows how badly it fails as a key.
Hulls sharing a name with at least one other ship, across 5,027 names held by more than one hull. A further 11,869 hulls have been inspected under more than one name. Match on the name and you are matching on a label that is neither unique nor stable.
The check digit
The seventh digit is not data. It is arithmetic on the first six, which means a corrupted number can usually be recognised as corrupt without asking anybody anything. Multiply the first six digits by 7, 6, 5, 4, 3 and 2 in order, add the products, and the last digit of that sum is the seventh digit.
IMO 9074729 digit 9 0 7 4 7 2 | 9 weight 7 6 5 4 3 2 | product 63 0 35 16 21 4 | 63 + 0 + 35 + 16 + 21 + 4 = 139 last digit of 139 is 9, which is the seventh digit. Valid.
There is a free IMO number checker on this site that runs this arithmetic for you, on one number or on a whole pasted column. It shows the working rather than a tick, and where only the last digit is wrong it offers the number that was probably meant. No account, and nothing you type into it leaves your browser.
There is a second rule that costs nothing and rejects a surprising amount of noise: a real IMO number begins with 5, 6, 7, 8 or 9. Numbers below that range were never issued. In fifteen lines:
def imo_is_valid(candidate: str) -> bool:
if len(candidate) != 7 or not candidate.isdigit():
return False
if candidate[0] not in "56789":
return False
weighted = sum(int(d) * w for d, w in zip(candidate[:6], (7, 6, 5, 4, 3, 2)))
return weighted % 10 == int(candidate[6])
Vendors and spreadsheets will hand you IMO 9074729, 9074729.0 where
a float has been through Excel, and a blank. Strip the prefix and the decimal tail, then run the
check. What fails should come back as nothing at all, never as a plausible looking string.
What the check digit does not catch
It catches every swap of two neighbouring digits, and almost every single mistyped digit.
Almost. Not all the weights are coprime with ten, so a few slips survive the arithmetic: the
third digit changed by an even amount, or the second, fourth or sixth changed by exactly five.
9054729 and 9574729 both pass the same test that 9074729
passes, and being well-formed is not the same as being real.
That is the honest limit of the whole exercise. A check digit tells you a number is not obviously mistyped. It never tells you a ship exists. The only thing that answers that is a lookup against a register.
Why a desk validates before it looks anything up
Numbers already in the database that arrived from AIS, looked exactly like IMO numbers, and were not. Every one of them would have been queried against every data source.
The first cost of skipping validation is money and allowance. Ownership lookups are metered hard, and the one route to registry ownership is capped at roughly 78 hulls per 7-day period. Spending a week of that on numbers no register has ever issued is not a rounding error, it is the week.
The second cost is far worse, and it is the reason this is a schema rule rather than a formatting nicety. A bad number that happens to pass the check can match a real record. When it does, one ship's registered owner, her inspection history and her sale record are stapled onto another ship's hull. Nothing about the result looks wrong. The particulars are real, the company is real, the dates are real, and the broker quoting from that record is quoting the wrong vessel to a charterer.
Which leads to the rule that follows from it: never invent an IMO number to fill a gap. A hull with no number is a hull with no number, and she can still hold a name, a deadweight and a position. A hull with a fabricated number is a landmine that will one day collide with a real one.
MMSI is not a substitute
The number that arrives with a position over AIS is usually the MMSI, and it is tempting to use it as the key because it is the one always present. It is exactly nine digits, it belongs to the radio installation rather than to the hull, and it is reassigned when a ship changes flag, because the first three digits identify the flag state. Key a fleet on MMSI and every reflagging creates a new ship and orphans the old one.
The same feed carries two other things that look like identifiers and are not. Inland waterway craft transmit an ENI number, issued under a different scheme for European inland navigation. And plenty of receivers pass through truncated or padded values that are neither. Seven digits of a nine digit MMSI can even satisfy the check digit by coincidence, which is what the leading 5-to-9 rule is there to reject.
MMSI is the right key for a transmission. IMO is the right key for a ship. Positions come in on the first and have to be resolved to the second before they are allowed anywhere near a vessel record.
The same problem, for companies
Ownership has its own version of this. A shipping company's name is written a dozen ways across registers, with and without the comma before the Ltd, in capitals and in title case, and a case-insensitive match still treats them as different firms. The IMO company number is the stable key: one number per legal entity, issued once. Without it a manager with 478 ships can appear to have none, which is precisely the company a broker most wants to reach.
Not every ship has one
The register holds 101,850 hulls and every one of them carries an IMO number, because that is the entry condition for being in it. The world merchant fleet, counted as floating objects, is a great deal larger than that, and the difference is not a coverage gap.
The scheme applies to seagoing merchant ships from 100 gross tonnage upwards. It leaves out wooden ships, pleasure craft not engaged in trade, ships with no mechanical propulsion, and a long tail of harbour craft, barges and small workboats. Fishing vessels were brought in later and on a voluntary basis, which is why fishing coverage is patchy rather than absent. A great many hulls afloat simply never receive a number, and no database can supply one for them.
For a chartering desk that trade-off is the right one. Everything a broker fixes is well above the threshold, so a register defined by the IMO number contains all of the tonnage and none of the noise. It is worth knowing the boundary is there, though, before treating a hull count as a count of every ship in the world.
The number is the one field to be strict about. Be generous everywhere else and the data still works: a name spelled three ways, a deadweight rounded by whoever typed it, a port written in shorthand, and the hull still resolves. Be generous with the IMO number and you get two records where there was one ship, or one record where there were two.
References
- IMO, IMO identification number schemes, resolutions A.600(15) and A.1078(28). imo.org
- IMO, International Convention for the Safety of Life at Sea (SOLAS), 1974. imo.org
- ITU, Recommendation ITU-R M.585-8: Assignment and use of identities in the maritime mobile service, 2019. itu.int
- IMO, AIS transponders, on the carriage requirement in SOLAS regulation V/19. imo.org
Related
Neptune Atlas
Neptune Atlas checks the digit twice, once in the importer so a bad row is rejected with a useful message, and again in the database so a bulk load cannot slip past the application. Every vessel record is keyed on the IMO number, which is why a rename or a change of flag updates the ship already on file instead of quietly opening a second one. Every paid plan starts with 7 free days. A card is needed to start them, and cancelling before they end costs nothing.
Try 7 days free Ship chartering software for brokers What each plan includes