elfensky/alpha5

GitHub: elfensky/alpha5

NORAD Alpha-5 卫星目录标识符编解码器,在整数与 Space-Track 五字符格式之间进行严格遵循规范的相互转换。

Stars: 0 | Forks: 0

# alpha5 [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/elfensky/alpha5/actions/workflows/ci.yml) NORAD Alpha-5 标识符编解码器 —— 在整数与 Space-Track 及现代 TLE/3LE 文件使用的 5 字符格式之间进行卫星目录 ID 的编码与解码(`A0123` ↔ `100123`)。零依赖。纯 ESM。约 70 行源码。该规范由美国太空军(US Space Force)冻结。 ## 安装 ``` npm install alpha5 ``` 需要 Node.js 20 或更高版本。同样适用于浏览器 —— 没有运行时依赖。 ## 用法 ``` import { decode, encode } from 'alpha5'; // or, for a namespace import: // import * as alpha5 from 'alpha5'; // alpha5.decode('A0123'); // Plain numeric designators round-trip unchanged. decode('25544'); // 25544 encode(25544); // '25544' // Alpha-5 designators decode to their canonical integer. decode('A0123'); // 100123 encode(100123); // 'A0123' // The I/O letters are reserved. decode('I0000'); // throws Error decode('O0000'); // throws Error // Boundaries: A0000 = 100,000, Z9999 = 339,999. encode(339999); // 'Z9999' encode(340000); // throws Error: exceeds Alpha-5 range ``` ## API ### `decode(s: string): number` 将 NORAD 标识符字符串解码为 `0..339_999` 范围内的整数值。 接受纯数字字符串(`"25544"`、`"00007"`)和 Alpha-5 标识符(`"A0123"`、`"Z9999"`)。接受任意长度的数字输入,因此省略了前导零的 JSON 数据源(例如用 `"7"` 代替 `"00007"`)依然可以正确解码。 如果输入出现以下情况则抛出异常: - 不是字符串,或者为空 - 包含空格、符号前缀,或十进制/科学记数法/十六进制/八进制/二进制标记 - 使用了保留字母(`I` 或 `O`) - 使用了小写字母 - 在字母前缀后有非数字尾部 - 解码后的值大于 `339_999` ### `encode(n: number): string` 将整数 NORAD ID 编码为其 5 字符标识符字符串。 - `0..99_999` 之间的值会进行零填充至 5 位数字(`encode(7) === "00007"`)。 - `100_000..339_999` 之间的值使用 Alpha-5 字母前缀(`encode(100123) === "A0123"`)。 - 输出**始终精确为 5 个字符**,且永远不包含保留字母 `I` 或 `O`。 如果 `n` 不是非负有限整数,或超过 `339_999` 则抛出异常。`BigInt`、布尔值、字符串、`null`、`undefined`、`NaN`、`±Infinity` 以及非整数浮点数均会被拒绝 —— 仅接受普通的有限整数。 ## 完整字母表 原文引自 [Space-Track Alpha-5 文档](https://www.space-track.org/documentation#tle-alpha5): | 字母 | 值 | | 字母 | 值 | | 字母 | 值 | | ------ | ----- | --- | ------ | ----- | --- | ------ | ----- | | A | 10 | | J | 18 | | S | 26 | | B | 11 | | K | 19 | | T | 27 | | C | 12 | | L | 20 | | U | 28 | | D | 13 | | M | 21 | | V | 29 | | E | 14 | | N | 22 | | W | 30 | | F | 15 | | P | 23 | | X | 31 | | G | 16 | | Q | 24 | | Y | 32 | | H | 17 | | R | 25 | | Z | 33 | `I` 和 `O` 被省略。 ## 原因 当卫星目录接近传统 5 位 NORAD 字段的 100,000 个 objects 限制时,美国太空军引入了 **Alpha-5** 作为权宜之计:5 字符字段的首个字符变为字母(从 `A`=10 到 `Z`=33,跳过 `I` 和 `O` 以避免与 `1` 和 `0` 混淆),将可寻址范围扩展至 339,999 个 objects。 如果您从 Space-Track 获取 TLE、3LE 或 GP/GP_HISTORY 数据,就需要这个编解码器。官方 Space-Track API 仅接受整数 NORAD ID 进行过滤,因此传入的任何 5 字符标识符都必须先进行解码,然后才能将其用作数据库键或查询参数。 规范: ## 稳定性 Alpha-5 规范由美国太空军冻结。本库严格遵循该规范,并针对官方文档中的所有示例、完整字母表、双向的两个 I/O 跳过边界,以及 0–339,999 整个范围内的往返属性检查进行了测试。 如果规范发生更改(Space-Track 建议新任务迁移至 XML/JSON/KVN —— Alpha-5 本身就是权宜之计),本库也会随之更新。 ## 未提供的功能 - **不提供非填充输出选项。** 本库生成标准的 5 字符 Alpha-5;如果您希望对低于 100,000 的 ID 进行非填充输出,只需使用 `String(n)`。变宽输出不属于 Alpha-5 规范,且会淡化本库的用途。 - **不提供 TLE/3LE 行的批量解析。** 这是一个仅用于目录 ID 字段的编解码器。请使用像 [`tle.js`](https://www.npmjs.com/package/tle.js) 这样的 TLE 解析器来处理完整的 TLE/3LE,并在提取后将目录字段传递给 `decode`。 - **没有错误子类。** 所有失败都会抛出带有描述性信息的普通 `Error`。如果您需要区分失败模式,请匹配该信息。 ## 许可证 MIT © Andrei Lavrenov
标签:GNU通用公共许可证, MITM代理, Node.js, NORAD, TLE, 卫星通信, 数据可视化, 编解码工具, 自定义脚本, 航天数据