随机英国登记板发电机

时间:2014-04-28 17:08:19

标签: php arrays regex random

我想创建一个生成随机英国车辆登记牌的功能(使用2001年推出的结构),但实际上不知道从哪里开始。

所有板块都遵循以下结构:

[两个字母] [两位数] [3个随机字母]

e.g。 BD51 SMR

有关结构的更多信息,请访问:http://goo.gl/jh8Ldi

前两个字母代表一个区域代码,其中有几百个,并不像A + AZ,B + AZ等那么简单。例如,A可以跟随除I,Q和Z之外的任何字母,而D只能跟着字母AK(不包括i)。

这两个数字代表制造年份 - 我认为我对此很好。

我可以处理的最后三封信。

无论如何得到前两个字母而不必在数组中列出所有可能的结果?

谢谢

2 个答案:

答案 0 :(得分:1)

Is there anyway of getting the first two letters without having to list all possible outcomes in an array?

嗯,是的。您可以对维基百科表中显示的规则进行编码 - 它是A-Z(带有一些排除项),然后是A-Y(具有不同的排除项),但后来有一些例外(例如,X只有A-F跟随它)。

但为什么不使用数组呢?维基百科页面为您列出了所有内容,只需几分钟就可以将其转换为数组,然后您就不需要了解编码它的最佳方法。

答案 1 :(得分:0)

我认为这个文字来自指示的"车辆登记......"页面是回答问题的关键:

In addition to the above local memory tags, personalised registrations are also offered
with arbitrary "local memory tags" prefixes, except for the letters I, Q, and Z.

如果我读得正确,那么字母D 可以后跟任何字母,除了I,Q和Z,如果有人要求(并且被授予)这样的话本地内存标签。在这种情况下,为了生成随机本地内存标记,您需要做的就是编写一个函数f(),它从1到23随机选择一个正整数,然后调用它两次,将每个数字映射到一个字母:< / p>

1->A
2->B
...
8->H    // skip I
9->J
10->K
...
15->P   // skip Q
16->R
17->S
...
23->Y   // skip Z