【问题标题】:Random UK registration plate generator [closed]随机英国车牌生成器[关闭]
【发布时间】:2014-04-28 17:08:18
【问题描述】:

我想创建一个生成随机英国车牌的函数(使用 2001 年引入的结构),但真的不知道从哪里开始。

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

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

例如BD51 SMR

关于结构的更多信息可以在这里找到:http://goo.gl/jh8Ldi

前两个字母代表一个区号,有几百个,它不像A + A-Z,B + A-Z等那么简单。例如A后面可以跟除I,Q和Z之外的任何字母, 而 D 后面只能跟字母 A-K(不包括 i)。

这两个数字代表制造年份 - 我觉得这个没问题。

我能处理的最后三个字母。

有没有办法得到前两个字母而不必在一个数组中列出所有可能的结果?

谢谢

【问题讨论】:

  • 有可能在没有明确的值列表的情况下获得前两个字母,但您需要告诉我们生成它们的算法是什么。
  • 我认为没有其他方法可以做到这一点。你总是需要能够检查你得到的是一个有效的结果,无论是通过查找还是代码中非常复杂的规则。根据您使用它的目的 - 它是否需要真正随机?看起来一些首字母可以让您从 A-Y 中获得第二个字母,所以如果您准备牺牲一些可能性,您可以通过从中选择来制作不太复杂的东西。
  • D Dees Shrewsbury L M N O P R S T U V W X Y

标签: php arrays regex random


【解决方案1】:
Is there anyway of getting the first two letters without having to list all possible outcomes in an array?

嗯,是的。您可以对 Wikipedia 表格中显示的规则进行编码 - 它是 A-Z(有一些排除项),然后是 A-Y(有不同的排除项),然后是一些例外(例如,X 后面只有 A-F)。

但是为什么不使用数组呢?维基百科页面为您列出了所有内容,只需几分钟即可将其转换为数组,然后您无需弄清楚最好的编码方式是什么。

【讨论】:

    【解决方案2】:

    我认为指示的“车辆注册...”页面中的这段文字是回答您问题的关键:

    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 中随机选择一个正整数,然后调用它两次,将每个数字映射到一个字母:

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

    【讨论】:

      猜你喜欢
      • 2010-10-14
      • 1970-01-01
      • 2020-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-05
      • 2016-04-04
      相关资源
      最近更新 更多