Tools

Two small tools. Both run entirely in your browser: nothing you type is sent anywhere.

Client-side only. The page’s Content-Security-Policy forbids connections to anything but this origin and forbids form submission; the scripts contain no network call. The Alpha-5 implementation is checked against the corpus’s specification vectors, which you can re-run here.

Alpha-5 encoder and decoder

Type a catalog number (like 100000) to see its five-character lettered form, or type a lettered field (like A0000) to get the number back. The rules are strict: capital letters only, never I or O, nothing above 339999.

Space-Track’s definition, applied strictly: A=10 … Z=33, I and O skipped, capitals only, exactly five characters; numbers below 100000 are five zero-padded digits; nothing above 339999 encodes. Lenient decoders (python-sgp4’s accepts I, O and lowercase) disagree with strict ones on such inputs, which is why the corpus treats them as invalid.

Examples:

How a number becomes a field: its first two digits are counted along the letters from A = 10, passing over I and O, and its last four digits stay as they are. Shown first: 234018, one of the examples Space-Track publishes.

The field of n: ⌊n / 10000⌋ counted along A = 10 … Z = 33 with I and O passed over, then n mod 10000 as four digits. Shown first: 234018, P4018, from the official examples in the corpus’s vectors.

number234018

fieldP4018no TLE form: above 339999 no letter is leftnot a catalog number, and not a field

  1. A10
  2. B11
  3. C12
  4. D13
  5. E14
  6. F15
  7. G16
  8. H17
  9. J18
  10. K19
  11. L20
  12. M21
  13. N22
  14. P23
  15. Q24
  16. R25
  17. S26
  18. T27
  19. U28
  20. V29
  21. W30
  22. X31
  23. Y32
  24. Z33
Letter table
lettervaluecatalog numbers

(official examples, boundaries, skip boundaries, below-100000 forms, invalid fields and unrepresentable numbers from corpus v0.7.0)

Anatomy of a TLE

A TLE is two lines of exactly 69 characters, sometimes with a name line above. Every position has a meaning, and almost every field has a named value in the newer format, the OMM. Hover over a field, tap it or tab to it to see what it is. The first example is the one printed in the international standard; the second is the test kit’s lettered rendering of catalog number 100000.

Column layout per CelesTrak’s format documentation; the catalog field decoded with the strict Alpha-5 rules; exponent fields decoded from their implied-decimal form; the epoch resolved through the 57 pivot; each field with the OMM keyword that carries the same value, as in the field map. Sets: the CCSDS 502.0-B-3 annex G example rendered by the corpus renderer, with the OMM values as the standard prints them, and the corpus’s published derived Alpha-5 line (SARAMAGO, first record). The page is built with both taken apart (site/content/tle-fields.json); a pasted set is taken apart by the same rules in the browser.

CCSDS annex G example (GOES 9), rendered as a TLE

         1         2         3         4         5         6         
123456789012345678901234567890123456789012345678901234567890123456789
GOES 9                  
1 23581U 95025A   20064.44075725 -.00000113  00000+0  10000-3 0  9254
2 23581   3.0539  81.7939 0005013 249.2363 150.1602  1.00273272 43169

Hover over a field, tap it or tab to it, to read it here.

Line number

line
1
columns
1
as printed
1
meaning
1
in the OMM
no value of its own

Always 1.

Catalog number

line
1
columns
3–7
as printed
23581
meaning
23,581
in the OMM
NORAD_CAT_ID = 23581

Five characters. Plain digits up to 99999. From 100000 on, Space-Track writes the first two digits as one letter and keeps the last four (Alpha-5: A=10 … Z=33, no I or O). CelesTrak instead leaves those objects out of TLE output altogether.

Classification

line
1
columns
8
as printed
U
meaning
U
in the OMM
CLASSIFICATION_TYPE = U

U unclassified, C classified (CelesTrak supplemental records use C), S secret.

Launch year

line
1
columns
10–11
as printed
95
meaning
95
in the OMM
OBJECT_ID = 1995-025A

Two digits of the international designator; no rule in any format document says how to pick the century.

Launch number of the year

line
1
columns
12–14
as printed
025
meaning
025
in the OMM
OBJECT_ID = 1995-025A

Piece of the launch

line
1
columns
15–17
as printed
A
meaning
A
in the OMM
OBJECT_ID = 1995-025A

Epoch year

line
1
columns
19–20
as printed
20
meaning
2020
in the OMM
EPOCH = 2020-064T10:34:41.4264

Two digits: 57–99 mean 1957–1999, 00–56 mean 2000–2056.

Epoch day of year with fraction

line
1
columns
21–32
as printed
064.44075725
meaning
2020-03-04 10:34:41 UTC
in the OMM
EPOCH = 2020-064T10:34:41.4264

Day 1 is January 1st; the fraction has 8 decimals, so the resolution is 864 microseconds.

First derivative of mean motion, halved

line
1
columns
34–43
as printed
-.00000113
meaning
-.00000113
in the OMM
MEAN_MOTION_DOT = -0.00000113

Revolutions per day squared, as printed. The OMM keyword MEAN_MOTION_DOT carries this printed value, not the true derivative.

Second derivative of mean motion, divided by six

line
1
columns
45–52
as printed
00000+0
meaning
0.0000e+0
in the OMM
MEAN_MOTION_DDOT = 0.0

Implied leading decimal point and a one-digit exponent. Zero is written 00000+0 by CelesTrak and 00000-0 by Space-Track.

BSTAR drag term

line
1
columns
54–61
as printed
10000-3
meaning
1.0000e-4
in the OMM
BSTAR = 0.0001

Implied leading decimal point: 10000-3 means 0.10000 × 10⁻³.

Ephemeris type

line
1
columns
63
as printed
0
meaning
0
in the OMM
EPHEMERIS_TYPE = 0

Element set number

line
1
columns
65–68
as printed
925
meaning
925
in the OMM
ELEMENT_SET_NO = 0925

Checksum

line
1
columns
69
as printed
4
meaning
4
in the OMM
no value of its own
computed
4 (matches)

Add every digit, count each minus sign as 1, ignore letters, blanks, periods and plus signs; keep the last digit.

Line number

line
2
columns
1
as printed
2
meaning
2
in the OMM
no value of its own

Always 2.

Catalog number

line
2
columns
3–7
as printed
23581
meaning
23,581
in the OMM
NORAD_CAT_ID = 23581

Must equal the field on line 1.

Inclination

line
2
columns
9–16
as printed
3.0539
meaning
3.0539 degrees
in the OMM
INCLINATION = 3.0539

Right ascension of the ascending node

line
2
columns
18–25
as printed
81.7939
meaning
81.7939 degrees
in the OMM
RA_OF_ASC_NODE = 81.7939

Eccentricity

line
2
columns
27–33
as printed
0005013
meaning
0.0005013
in the OMM
ECCENTRICITY = 0.0005013

Seven digits with an implied leading decimal point. CelesTrak truncates the OMM value to seven digits; Space-Track rounds it, so the last digit can differ between the two providers for the same record.

Argument of perigee

line
2
columns
35–42
as printed
249.2363
meaning
249.2363 degrees
in the OMM
ARG_OF_PERICENTER = 249.2363

Mean anomaly

line
2
columns
44–51
as printed
150.1602
meaning
150.1602 degrees
in the OMM
MEAN_ANOMALY = 150.1602

Mean motion

line
2
columns
53–63
as printed
1.00273272
meaning
1.00273272 revolutions per day
in the OMM
MEAN_MOTION = 1.00273272

Revolution number at epoch

line
2
columns
64–68
as printed
4316
meaning
4316
in the OMM
REV_AT_EPOCH = 4316

Checksum

line
2
columns
69
as printed
9
meaning
9
in the OMM
no value of its own
computed
9 (matches)

Its checksum, character by character

The last character of each line is a check on the other 68: add up every digit, count each minus sign as 1, and count nothing for letters, blanks, points and plus signs; the last digit of the sum must be that character. Under each character of line 1 is what it adds.

Modulo-10 checksum of columns 1 to 68: digits count their value, - counts 1, everything else 0. Under each character of line 1, its count. The three changes below are made to line 1 with its column 69 left as it was: a letter in a numeric field counts 0 like the 0 it replaced, and two digits changed over add up to what they did, so neither moves the sum (the corpus’s corrupt-input case hands a parser such a line).

1 23581U 95025A   20064.44075725 -.00000113  00000+0  10000-3 0  9254
1·23581··95025····20064·44075725·1·00000113··00000·0··1000013·0··925

Line 1: the counts add up to 114, which ends in 4; column 69 says 4: it matches.

Line 2: the counts add up to 169, which ends in 9; column 69 says 9: it matches.

What a reader makes of such a line

The test kit hands every program a line like the first change below: a letter O in its date, and a check digit that still fits. The programs that went on and built a record from it read the first time here, where the unedited file has the second, 14 minutes and 16 seconds later.

The corpus’s corrupt-input case hands a reader a set whose line 1 has the letter O in its epoch field and a checksum that still holds. The one-off runs that built a record from it read the first epoch here; the unedited file’s is the second, 14 min 16 s later.

read2026-07-08T16:48:00.000000unedited2026-07-08T17:02:16.167840

Which runs, and the report that went to each project: case 18 on the Library status page.

What line 1’s checksum sees, and what it does not
a change to line 1columnswasbecomesthe counts then end incolumn 69 saysthe checksumShow it on the line
The letter O for a 0 in the epoch200O44not seen
Two neighbouring digits changed over67–68255244not seen
One digit raised by one685654caught

Derived Alpha-5 example from the corpus (catalog 100000, SARAMAGO, first record)

         1         2         3         4         5         6         
123456789012345678901234567890123456789012345678901234567890123456789
SARAMAGO                
1 A0000U 26067CY  26195.90649229  .00004770  00000+0  22159-3 0  9994
2 A0000  97.4593 154.0970 0005590 270.5113  89.5482 15.20467281 15911

Hover over a field, tap it or tab to it, to read it here.

Line number

line
1
columns
1
as printed
1
meaning
1
in the OMM
no value of its own

Always 1.

Catalog number

line
1
columns
3–7
as printed
A0000
meaning
100,000 (Alpha-5, letter A = 10)
in the OMM
NORAD_CAT_ID

Five characters. Plain digits up to 99999. From 100000 on, Space-Track writes the first two digits as one letter and keeps the last four (Alpha-5: A=10 … Z=33, no I or O). CelesTrak instead leaves those objects out of TLE output altogether.

Classification

line
1
columns
8
as printed
U
meaning
U
in the OMM
CLASSIFICATION_TYPE

U unclassified, C classified (CelesTrak supplemental records use C), S secret.

Launch year

line
1
columns
10–11
as printed
26
meaning
26
in the OMM
OBJECT_ID

Two digits of the international designator; no rule in any format document says how to pick the century.

Launch number of the year

line
1
columns
12–14
as printed
067
meaning
067
in the OMM
OBJECT_ID

Piece of the launch

line
1
columns
15–17
as printed
CY
meaning
CY
in the OMM
OBJECT_ID

Epoch year

line
1
columns
19–20
as printed
26
meaning
2026
in the OMM
EPOCH

Two digits: 57–99 mean 1957–1999, 00–56 mean 2000–2056.

Epoch day of year with fraction

line
1
columns
21–32
as printed
195.90649229
meaning
2026-07-14 21:45:20 UTC
in the OMM
EPOCH

Day 1 is January 1st; the fraction has 8 decimals, so the resolution is 864 microseconds.

First derivative of mean motion, halved

line
1
columns
34–43
as printed
.00004770
meaning
.00004770
in the OMM
MEAN_MOTION_DOT

Revolutions per day squared, as printed. The OMM keyword MEAN_MOTION_DOT carries this printed value, not the true derivative.

Second derivative of mean motion, divided by six

line
1
columns
45–52
as printed
00000+0
meaning
0.0000e+0
in the OMM
MEAN_MOTION_DDOT

Implied leading decimal point and a one-digit exponent. Zero is written 00000+0 by CelesTrak and 00000-0 by Space-Track.

BSTAR drag term

line
1
columns
54–61
as printed
22159-3
meaning
2.2159e-4
in the OMM
BSTAR

Implied leading decimal point: 10000-3 means 0.10000 × 10⁻³.

Ephemeris type

line
1
columns
63
as printed
0
meaning
0
in the OMM
EPHEMERIS_TYPE

Element set number

line
1
columns
65–68
as printed
999
meaning
999
in the OMM
ELEMENT_SET_NO

Checksum

line
1
columns
69
as printed
4
meaning
4
in the OMM
no value of its own
computed
4 (matches)

Add every digit, count each minus sign as 1, ignore letters, blanks, periods and plus signs; keep the last digit.

Line number

line
2
columns
1
as printed
2
meaning
2
in the OMM
no value of its own

Always 2.

Catalog number

line
2
columns
3–7
as printed
A0000
meaning
100,000 (Alpha-5, letter A = 10)
in the OMM
NORAD_CAT_ID

Must equal the field on line 1.

Inclination

line
2
columns
9–16
as printed
97.4593
meaning
97.4593 degrees
in the OMM
INCLINATION

Right ascension of the ascending node

line
2
columns
18–25
as printed
154.0970
meaning
154.097 degrees
in the OMM
RA_OF_ASC_NODE

Eccentricity

line
2
columns
27–33
as printed
0005590
meaning
0.0005590
in the OMM
ECCENTRICITY

Seven digits with an implied leading decimal point. CelesTrak truncates the OMM value to seven digits; Space-Track rounds it, so the last digit can differ between the two providers for the same record.

Argument of perigee

line
2
columns
35–42
as printed
270.5113
meaning
270.5113 degrees
in the OMM
ARG_OF_PERICENTER

Mean anomaly

line
2
columns
44–51
as printed
89.5482
meaning
89.5482 degrees
in the OMM
MEAN_ANOMALY

Mean motion

line
2
columns
53–63
as printed
15.20467281
meaning
15.20467281 revolutions per day
in the OMM
MEAN_MOTION

Revolution number at epoch

line
2
columns
64–68
as printed
1591
meaning
1591
in the OMM
REV_AT_EPOCH

Checksum

line
2
columns
69
as printed
1
meaning
1
in the OMM
no value of its own
computed
1 (matches)

Its checksum, character by character

The last character of each line is a check on the other 68: add up every digit, count each minus sign as 1, and count nothing for letters, blanks, points and plus signs; the last digit of the sum must be that character. Under each character of line 1 is what it adds.

Modulo-10 checksum of columns 1 to 68: digits count their value, - counts 1, everything else 0. Under each character of line 1, its count. The three changes below are made to line 1 with its column 69 left as it was: a letter in a numeric field counts 0 like the 0 it replaced, and two digits changed over add up to what they did, so neither moves the sum (the corpus’s corrupt-input case hands a parser such a line).

1 A0000U 26067CY  26195.90649229  .00004770  00000+0  22159-3 0  9994
1··0000··26067····26195·90649229···00004770··00000·0··2215913·0··999

Line 1: the counts add up to 154, which ends in 4; column 69 says 4: it matches.

Line 2: the counts add up to 191, which ends in 1; column 69 says 1: it matches.

What a reader makes of such a line

The test kit hands every program a line like the first change below: a letter O in its date, and a check digit that still fits. The programs that went on and built a record from it read the first time here, where the unedited file has the second, 14 minutes and 16 seconds later.

The corpus’s corrupt-input case hands a reader a set whose line 1 has the letter O in its epoch field and a checksum that still holds. The one-off runs that built a record from it read the first epoch here; the unedited file’s is the second, 14 min 16 s later.

read2026-07-08T16:48:00.000000unedited2026-07-08T17:02:16.167840

Which runs, and the report that went to each project: case 18 on the Library status page.

What line 1’s checksum sees, and what it does not
a change to line 1columnswasbecomesthe counts then end incolumn 69 saysthe checksumShow it on the line
The letter O for a 0 in the epoch260O44not seen
Two neighbouring digits changed over58–59599544not seen
One digit raised by one630154caught

Paste your own

Paste a TLE (two or three lines). It is checked the way a strict reader would check it, and taken apart under the box, right here in your browser. It never leaves this page.

Five checks, in the browser: a line 1 with its line 2 straight after it; 69 characters each; both checksums; the catalog field the same on both lines and a strict Alpha-5 decode; every other field in the form its columns may hold, so that a letter in a number is refused. They are the four things the corpus’s corrupt-input case asks of a TLE reader, and its catalog-field check. Not sent anywhere; see the CSP in the response headers.

The set you pasted


  

Hover over a field, tap it or tab to it, to read it here.

Its checksum, character by character


  

Line 1: the counts add up to , which ends in ; column 69 says :

What a reader makes of such a line

The test kit hands every program a line like the first change below: a letter O in its date, and a check digit that still fits. The programs that went on and built a record from it read the first time here, where the unedited file has the second, 14 minutes and 16 seconds later.

The corpus’s corrupt-input case hands a reader a set whose line 1 has the letter O in its epoch field and a checksum that still holds. The one-off runs that built a record from it read the first epoch here; the unedited file’s is the second, 14 min 16 s later.

read2026-07-08T16:48:00.000000unedited2026-07-08T17:02:16.167840

Which runs, and the report that went to each project: case 18 on the Library status page.

What line 1’s checksum sees, and what it does not
a change to line 1columnswasbecomesthe counts then end incolumn 69 saysthe checksumShow it on the line