Random string generation with upper case letters and digits

前端 未结 30 3170
逝去的感伤
逝去的感伤 2020-11-22 02:51

I want to generate a string of size N.

It should be made up of numbers and uppercase English letters such as:

  • 6U1S75
  • 4Z4UKK
  • U911K4
30条回答
  •  借酒劲吻你
    2020-11-22 03:00

    A faster, easier and more flexible way to do this is to use the strgen module (pip install StringGenerator).

    Generate a 6-character random string with upper case letters and digits:

    >>> from strgen import StringGenerator as SG
    >>> SG("[\u\d]{6}").render()
    u'YZI2CI'
    

    Get a unique list:

    >>> SG("[\l\d]{10}").render_list(5,unique=True)
    [u'xqqtmi1pOk', u'zmkWdUr63O', u'PGaGcPHrX2', u'6RZiUbkk2i', u'j9eIeeWgEF']
    

    Guarantee one "special" character in the string:

    >>> SG("[\l\d]{10}&[\p]").render()
    u'jaYI0bcPG*0'
    

    A random HTML color:

    >>> SG("#[\h]{6}").render()
    u'#CEdFCa'
    

    etc.

    We need to be aware that this:

    ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(N))
    

    might not have a digit (or uppercase character) in it.

    strgen is faster in developer-time than any of the above solutions. The solution from Ignacio is the fastest run-time performing and is the right answer using the Python Standard Library. But you will hardly ever use it in that form. You will want to use SystemRandom (or fallback if not available), make sure required character sets are represented, use unicode (or not), make sure successive invocations produce a unique string, use a subset of one of the string module character classes, etc. This all requires lots more code than in the answers provided. The various attempts to generalize a solution all have limitations that strgen solves with greater brevity and expressive power using a simple template language.

    It's on PyPI:

    pip install StringGenerator
    

    Disclosure: I'm the author of the strgen module.

提交回复
热议问题