This article describes how to generate a Chinese Random verification code in python. For more information, see the following code:
#-*-Coding: UTF-8 -*-
Import Image, ImageDraw, ImageFont
Import random
Import math, string
Class RandomChar ():
"Used to randomly generate Chinese characters """
@ Staticmethod
Def Unicode ():
Val = random. randint (0x4E00, 0x9FBF)
Return unichr (val)
@ Staticmethod
Def GB2312 ():
Head = random. randint (0xB0, 0xCF)
Body = random. randint (0xA, 0xF)
Tail = random. randint (0, 0xF)
Val = (head <8) | (body <4) | tail
Str = "% x" % val
Return str. decode ('hex'). decode ('gb2312 ')
Class ImageChar ():
Def _ init _ (self, fontColor = (0, 0, 0 ),
Size = (100, 40 ),
FontPath = 'wqy. ttc ',
BgColor = (1, 255,255,255 ),
FontSize = 20 ):
Self. size = size
Self. fontPath = fontPath
Self. bgColor = bgColor
Self. fontSize = fontSize
Self. fontColor = fontColor
Self. font = ImageFont. truetype (self. fontPath, self. fontSize)
Self. image = Image. new ('rgb ', size, bgColor)
Def rotate (self ):
Self. image. rotate (random. randint (0, 30), expand = 0)
Def drawText (self, pos, txt, fill ):
Draw = ImageDraw. Draw (self. image)
Draw. text (pos, txt, font = self. font, fill = fill)
Del draw
Def randRGB (self ):
Return (random. randint (0,255 ),
Random. randint (0,255 ),
Random. randint (0,255 ))
Def randPoint (self ):
(Width, height) = self. size
Return (random. randint (0, width), random. randint (0, height ))
Def randLine (self, num ):
Draw = ImageDraw. Draw (self. image)
For I in range (0, num ):
Draw. line ([self. randPoint (), self. randPoint ()], self. randRGB ())
Del draw
Def randChinese (self, num ):
Gap = 5
Start = 0
For I in range (0, num ):
Char = RandomChar (). GB2312 ()
X = start + self. fontSize * I + random. randint (0, gap) + gap * I
Self. drawText (x, random. randint (-5, 5), RandomChar (). GB2312 (), self. randRGB ())
Self. rotate ()
Self. randLine (18)
Def save (self, path ):
Self. image. save (path)