随机美国州名生成器

在 50 个州加华盛顿特区共 51 项里抽取州名,可按 2020 年人口加权,也可退回每项等概率的均匀口径。同一颗种子配同一组选项必然抽出同一串结果,改一位数字就换一批。人口、面积、USPS 缩写、FIPS 代码与加入年份都在下面的完整表里,全部在本浏览器完成。

均匀口径下每一项被抽中的概率都是 1.96 个百分点;换成按人口加权,加利福尼亚会升到 11.93 个百分点,怀俄明只剩 0.17 个百分点。
1. 爱达荷 Idaho 2. 亚拉巴马 Alabama 3. 爱达荷 Idaho 4. 新墨西哥 New Mexico 5. 肯塔基 Kentucky 6. 得克萨斯 Texas 7. 马里兰 Maryland 8. 蒙大拿 Montana 9. 新墨西哥 New Mexico 10. 亚拉巴马 Alabama
序中文州名英文州名缩写FIPS2020 人口面积 km²加入年份
1亚拉巴马AlabamaAL0150242791357671819
2阿拉斯加AlaskaAK0273339117233371959
3亚利桑那ArizonaAZ0471515022952341912
4阿肯色ArkansasAR0530115241377321836
5加利福尼亚CaliforniaCA06395382234239671850
6科罗拉多ColoradoCO0857737142696011876
7康涅狄格ConnecticutCT093605944143571788
8特拉华DelawareDE1098994864461787
9哥伦比亚特区District of ColumbiaDC116895451771790
10佛罗里达FloridaFL12215381871703121845
11佐治亚GeorgiaGA13107119081539101788
12夏威夷HawaiiHI151455271283131959
13爱达荷IdahoID1618391062164431890
14伊利诺伊IllinoisIL17128125081499951818
15印第安纳IndianaIN186785528943261816
16艾奥瓦IowaIA1931903691457461846
17堪萨斯KansasKS2029378802131001861
18肯塔基KentuckyKY2145058361046561792
19路易斯安那LouisianaLA2246577571356591812
20缅因MaineME231362359916331820
21马里兰MarylandMD246177224321311788
22马萨诸塞MassachusettsMA257029917273361788
23密歇根MichiganMI26100773312504871837
24明尼苏达MinnesotaMN2757064942251631858
25密西西比MississippiMS2829612791254381817
26密苏里MissouriMO2961549131805601821
27蒙大拿MontanaMT3010842253808311889
28内布拉斯加NebraskaNE3119615042003301867
29内华达NevadaNV3231046142863801864
30新罕布什尔New HampshireNH331377529242141788
31新泽西New JerseyNJ349288994225911787
32新墨西哥New MexicoNM3521175223149171912
33纽约New YorkNY36202012491412971788
34北卡罗来纳North CarolinaNC37104393881393911789
35北达科他North DakotaND387790941831081889
36俄亥俄OhioOH39117994481160981803
37俄克拉何马OklahomaOK4039593531810371907
38俄勒冈OregonOR4142372562547991859
39宾夕法尼亚PennsylvaniaPA42130027001192801787
40罗得岛Rhode IslandRI44109737940011790
41南卡罗来纳South CarolinaSC455118425829331788
42南达科他South DakotaSD468866671997291889
43田纳西TennesseeTN4769108401092471796
44得克萨斯TexasTX48291455056956621845
45犹他UtahUT4932716162198821896
46佛蒙特VermontVT50643077249061791
47弗吉尼亚VirginiaVA5186313931107871788
48华盛顿WashingtonWA5377052811846611889
49西弗吉尼亚West VirginiaWV541793716627551863
50威斯康星WisconsinWI5558937181696351848
51怀俄明WyomingWY565768512533351890

完整表共 51 项,默认显示 12 行,点「加载更多」展开全部。

使用方法

  1. 「生成数量」默认 10,范围 1 到 50,步长 1。光标停在框里按回车立即重抽一次。
  2. 「抽样口径」二选一:均匀是 51 项等概率,按人口加权是人口多的州更容易出现。两者是两套完全不同的概率,结果分布差别很大。
  3. 「是否允许重复」决定抽中之后放不放回。允许重复时同一个州可能连着出现两次;不允许重复时抽一项就从候选里剔掉一项。
  4. 「输出字段」可选州名(中文加英文)、缩写、缩写加人口、缩写加面积或全部字段;「结果排序」可选抽取顺序、字母序、加入联邦顺序、人口降序、面积降序。
  5. 「随机种子」默认 20260101,范围 1 到 2147483646,步长 1。种子与其余选项都相同时,抽出的序列逐项一致;改一位数字就换一批。
  6. 「排除名单」默认写着 AK 与 HI 两行,每行写一个中文州名、英文州名或两字母缩写,大小写不敏感。按 Ctrl+Enter(Mac 上 Cmd+Enter)重新生成,清空后点「立即生成」会填回示例。
  7. 结果区第一行给出本次抽样的口径说明,下面按你选的字段逐行列出。「复制结果」复制整段文字,「复制表格」复制完整对照表的制表符版本。
  8. 工具区下方就是那张 51 项完整表,默认显示 12 行,点「加载更多」展开全部,点「导出 CSV」存成带 BOM 的文件。

这个随机美国州名生成器能解决什么问题

「随机抽一个州」听起来只有一种做法,实际上至少有两种,而且它们的分布完全不同。均匀口径下 51 项等概率,每一项都是 1.96 个百分点;按人口加权时加利福尼亚占 11.93 个百分点,怀俄明只占 0.17 个百分点,两者相差 68.54 倍。本站这一页把两种口径都摆出来,就是为了让「随机」这件事先被说清楚再动手。

第一类是造测试数据。批量生成地址、订单、门店记录时,州名字段若按均匀分布造,会造出一个与现实人口完全不符的样本:怀俄明和加利福尼亚出现次数一样多,任何按州聚合的统计都会失真。按人口加权抽出的样本才接近真实分布。

第二类是抽签与分组。课堂点名、团建分组、抽奖这类场景要的恰恰是公平,也就是 51 项等概率的均匀口径;这时若误用了按人口加权,大州会被反复抽中,小州几乎轮不到。

第三类是做示例与占位内容。写文档、做演示数据、填表单样例时,需要的是几个读起来像真的州名,这时用均匀口径加固定种子最省事:种子一记,下次还能复现同一串结果。

第四类是排除特定项。阿拉斯加与夏威夷在物流、配送时效的样例里经常要剔除;本页的排除名单支持中文州名、英文州名与两字母缩写三种写法,填进去就从候选池里摘掉。

计算原理与变量说明

候选池是 51 项:50 个州加华盛顿特区。另有 5 个有人居住的领地不在这 51 项之内,它们的居民是美国公民但没有国会投票代表,本页不纳入抽取。

2020 年普查给出的全国合计是人口 331455055、面积 9833518 km²。人口最多的是加利福尼亚 39538223、得克萨斯 29145505、佛罗里达 21538187;人口最少的是怀俄明 576851,与加利福尼亚相差 68.54 倍。面积最大的是阿拉斯加 1723337 km²;面积最小的「州」是罗得岛 4001 km²——哥伦比亚特区只有 177 km²,但它不是州。阿拉斯加除以罗得岛是 430.726568358 倍。

伪随机数的生成只用一条线性同余式,每次抽一项推进一次:

s = (Math.imul(s, 1103515245) + 12345) & 0x7fffffff,然后 r = s / 2147483647 得到 [0, 1) 区间里的数。这里必须用按位与把结果压回 31 位,写成 s * 1103515245 + 12345 会因为超出双精度能精确表示的整数范围而丢掉低位,序列也就不再是同一个序列。

均匀口径取 Math.floor(r * arr.length),直接把 r 映射到候选下标。按人口加权则先求候选池的人口总和,令 t = r * 总和,再顺着人口累计值找到第一个超过 t 的那一项。两者的差别只在这一步:前者按项数等分区间,后者按人口等分区间。

不允许重复时,每抽中一项就把它从候选数组里摘掉,下一次推进随机数时数组长度已经少一。所以数量超过候选池大小时本页直接报错,不会静默地把数量压到可用项数。

每个州都有一个两字母的 USPS 缩写。早期邮政系统用过 Ala.、Calif.、Colo.、Penn. 这类长短不一的写法,1963 年才统一成两字母。FIPS 州代码则是 01 到 56 的编号,含领地与特区,编号并不连续,例如没有 03、07,14 到 15 之间也跳号。

完整示例(数值仅作演示)

打开页面时的默认值是数量 10、均匀口径、允许重复、输出州名、不排序、种子 20260101,排除名单写着 AK 与 HI,候选池因此是 49 项。抽出的一列是:爱达荷、亚拉巴马、爱达荷、新墨西哥、肯塔基、得克萨斯、马里兰、蒙大拿、新墨西哥、亚拉巴马。爱达荷与新墨西哥各出现两次,正是「抽完放回」的直接结果。

把「是否允许重复」改成不允许重复,同样这颗种子会抽出 10 个互不相同的州——因为每抽一项候选池就少一项,后续的下标映射全部右移。这不是换了随机源,是换了抽样方式。

把「抽样口径」改成按人口加权,同一颗种子下的分布立刻偏向大州:加利福尼亚、得克萨斯、佛罗里达这类人口上千万的州出现频率明显升高,怀俄明、佛蒙特这类人口不足百万的州可能几十次才轮到一次。加权概率与均匀概率之比,加利福尼亚是 6.08362836102,也就是它在大州口径下比在均匀口径下容易出现六倍多。

51 个州与特区对照表

下表是人口最多的前 12 项,人口占比按全国合计 331455055 计算。完整 51 项表在工具区,含 FIPS 代码与加入年份,可展开并导出。

中文州名英文州名缩写2020 人口人口占比面积 km²
加利福尼亚CaliforniaCA3953822311.93423967
得克萨斯TexasTX291455058.79695662
佛罗里达FloridaFL215381876.50170312
纽约New YorkNY202012496.09141297
宾夕法尼亚PennsylvaniaPA130027003.92119280
伊利诺伊IllinoisIL128125083.87149995
俄亥俄OhioOH117994483.56116098
佐治亚GeorgiaGA107119083.23153910
北卡罗来纳North CarolinaNC104393883.15139391
密歇根MichiganMI100773313.04250487
新泽西New JerseyNJ92889942.8022591
弗吉尼亚VirginiaVA86313932.60110787

四种排序给出的第一名互不相同:按字母序第一是 Alabama、最后是 Wyoming;按加入联邦顺序第一是特拉华(1787 年 12 月 7 日批准宪法)、第五十是夏威夷(1959 年 8 月 21 日);按人口第一是加利福尼亚;按面积第一是阿拉斯加。

结果边界、舍入与适用说明

常见问题

均匀抽样和按人口加权到底差多少?

差很多。均匀口径下每一项都是 1.96 个百分点;按人口加权时加利福尼亚是 11.93 个百分点、怀俄明只有 0.17 个百分点,两者相差 68.54 倍。加利福尼亚的加权概率与均匀概率之比是 6.08362836102,也就是它在加权口径下容易出现六倍多。

为什么说是 51 项而不是 50 个州?

因为候选池含华盛顿特区:50 个州加哥伦比亚特区共 51 项,特区人口 689545、面积 177 km²。另有 5 个有人居住的领地不在其中,本页不纳入抽取。

面积最小的州是哪个?

只看 50 个州的话是罗得岛,4001 km²。若把特区也算进来,哥伦比亚特区只有 177 km²,但它不是州。面积最大的是阿拉斯加 1723337 km²,除以罗得岛是 430.726568358 倍。

同一颗种子为什么换了选项结果就变了?

种子只决定伪随机数列本身,选项决定这一列怎么被使用。改成按人口加权,同一个 r 会被映射成累计人口上的位置而不是数组下标;改成不允许重复,候选数组长度每次都变。任何一种改动都会让映射关系整体偏移。

随机算法为什么强调要用 Math.imul?

线性同余式里的乘数 1103515245 与 31 位状态相乘会超出双精度能精确表示的整数范围,直接写乘号会丢掉低位。Math.imul 做 32 位整数乘法,配合按位与把结果压回 31 位,序列才与定义一致。

FIPS 代码为什么不是连续的?

FIPS 州代码按字母序从 01 编到 56,中间穿插了领地与特区,且历史上撤销过若干编号,所以 03、07 等编号是空的。它和 USPS 两字母缩写是两套独立体系,缩写是 1963 年才统一的。

允许重复时同一个州连续出现是出错了吗?

不是。允许重复意味着抽完放回,候选池长度不变,下一个下标完全独立,同一个州连着出现两次甚至三次都属正常。想要互不相同的名单,请把「是否允许重复」改成不允许重复。

输入的内容会上传到服务器吗?

不会。数量、种子、排除名单与所有选项只在本页脚本里参与运算,页面没有发起任何网络请求,刷新后输入即回到默认值。

相关工具