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
- A10
- B11
- C12
- D13
- E14
- F15
- G16
- H17
- Inever used
- J18
- K19
- L20
- M21
- N22
- Onever used
- P23
- Q24
- R25
- S26
- T27
- U28
- V29
- W30
- X31
- Y32
- Z33
Letter table
| letter | value | catalog 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.
| a change to line 1 | columns | was | becomes | the counts then end in | column 69 says | the checksum | Show it on the line |
|---|---|---|---|---|---|---|---|
| The letter O for a 0 in the epoch | 20 | 0 | O | 4 | 4 | not seen | |
| Two neighbouring digits changed over | 67–68 | 25 | 52 | 4 | 4 | not seen | |
| One digit raised by one | 68 | 5 | 6 | 5 | 4 | caught |
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.
| a change to line 1 | columns | was | becomes | the counts then end in | column 69 says | the checksum | Show it on the line |
|---|---|---|---|---|---|---|---|
| The letter O for a 0 in the epoch | 26 | 0 | O | 4 | 4 | not seen | |
| Two neighbouring digits changed over | 58–59 | 59 | 95 | 4 | 4 | not seen | |
| One digit raised by one | 63 | 0 | 1 | 5 | 4 | caught |
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.
| a change to line 1 | columns | was | becomes | the counts then end in | column 69 says | the checksum | Show it on the line |
|---|