package Ġcom . y og cn . core . view Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics .* Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . util . Typed Value Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġcom . y og cn . core . R Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġl yn don Ġon Ġ 2 0 1 7 / 1 1 / 5 . Ċ Ġ*/ Ċ class ĠVerify Code View Ġ: ĠView Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Code Text : ĠString // æĸĩæľ¬ åĨħå®¹ ĊĊĠĠĠ Ġprivate Ġvar Ġm Code Text Size : ĠInt Ġ= Ġ 0 // æĸĩæľ¬ å¤§å°ı ĊĊĠĠĠ Ġprivate Ġvar Ġm Code Length : ĠInt Ġ= Ġ 0 // éªĮè¯ģçłģ éķ¿åº¦ ĊĊĠĠĠ Ġprivate Ġvar Ġm Code Background : ĠInt Ġ= Ġ 0 // èĥĮæĻ¯ èī² ĊĊĠĠĠ Ġprivate Ġvar Ġis Contain Char : ĠBoolean Ġ= Ġfalse // éªĮè¯ģçłģ æĺ¯åĲ¦ åĮħåĲ« åŃĹ æ¯į ĊĊĠĠĠ Ġprivate Ġvar Ġm Point Num : ĠInt Ġ= Ġ 0 // å¹² æī ° çĤ¹ æķ° ĊĊĠĠĠ Ġprivate Ġvar Ġm Line Num : ĠInt Ġ= Ġ 0 // å¹² æī ° çº¿ æķ° ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Paint : ĠPaint Ġ// çĶ» ç¬Ķ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Bound : ĠRect // ç»ĺ åĪ¶ èĮĥåĽ´ ĊĊĠĠĠ Ġprivate Ġvar Ġbitmap : ĠBitmap ? Ġ= Ġnull // éªĮè¯ģçłģ åĽ¾çīĩ ĊĊĠĠĠ Ġprivate Ġval Ġm Random Ġ= ĠRandom () ĊĊĠĠĠ Ġprivate Ġvar Ġm Width : ĠInt Ġ= Ġ 0 // æİ§ä»¶ çļĦ å®½åº¦ ĊĊĠĠĠ Ġprivate Ġvar Ġm Height : ĠInt Ġ= Ġ 0 // æİ§ä»¶ çļĦ é«ĺåº¦ ĊĊĠĠĠ Ġconstructor ( context : ĠContext ) Ġ: Ġthis ( context , Ġnull ) ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ?) Ġ: Ġthis ( context , Ġattrs , Ġ 0 ) ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ?, Ġdef Style Attr : ĠInt ) Ġ: Ġsuper ( context , Ġattrs , Ġdef Style Attr ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Attr Values ( context , Ġattrs ) ĊĠĠĠĠĠĠĠ Ġinit Data () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġinit Attr Values ( context : ĠContext , Ġattrs : ĠAttributeSet ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ// èİ·åıĸ åľ¨ Attribute Set ä¸Ń å®ļä¹ī çļĦ ĠVerify Code Ġä¸Ń å£°æĺİ çļĦ å±ŀæĢ§ çļĦ éĽĨåĲĪ ĊĠĠĠĠĠĠĠ Ġval Ġtyped Array Ġ= Ġcontext . obtain Styled Attributes ( attrs , ĠR . style able . Verify Code ) ĊĠĠĠĠĠĠĠ Ġ// èİ·åıĸ Type Array çļĦ éķ¿åº¦ ĊĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġtyped Array . index Count ĊĠĠĠĠĠĠĠ Ġ( 0 Ġuntil Ġcount ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// èİ·åıĸ æŃ¤ é¡¹ å±ŀæĢ§ çļĦ ID ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtyped Array . getIndex ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Verify Code _ code Text Size Ġ-> Ġ// Ġé»ĺè®¤ è®¾ç½®ä¸º 1 6 sp ï¼Į Type Value ç±» Ġpx è½¬ sp Ġ ä¸Ģä¸ª è½¬æį¢ ç±» ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Code Text Size Ġ= Ġtyped Array . get Dimension Pixel Size ( it , ĠTyped Value . apply Dimension ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTyped Value . COMPLEX _ UNIT _ SP , Ġ 2 0 f , Ġresources . display Metrics ). toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Verify Code _ code Background Ġ-> Ġm Code Background Ġ= Ġtyped Array . getColor ( it , ĠColor . WHITE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Verify Code _ code Length Ġ-> Ġm Code Length Ġ= Ġtyped Array . getInteger ( it , Ġ 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Verify Code _ is Contain Char Ġ-> Ġis Contain Char Ġ= Ġtyped Array . getBoolean ( it , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Verify Code _ point Num Ġ-> Ġm Point Num Ġ= Ġtyped Array . getInteger ( it , Ġ 1 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Verify Code _ lin Num Ġ-> Ġm Line Num Ġ= Ġtyped Array . getInteger ( it , Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Re cycles Ġthe ĠTyped Array , Ġto Ġbe Ġre - used Ġby Ġa Ġlater Ġcaller ĊĠĠĠĠĠĠĠ Ġ// å®ĺæĸ¹ è§£éĩĬ ï¼ļ åĽŀ æĶ¶ Typed Array Ġä»¥ ä¾¿ åĲİ éĿ¢çļĦ ä½¿çĶ¨ èĢħ éĩį çĶ¨ ĊĠĠĠĠĠĠĠ Ġtyped Array . recycle () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪĿå§ĭåĮĸ æķ°æį® ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġinit Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Code Text Ġ= Ġget Validation Code ( m Code Length , Ġis Contain Char ) ĊĠĠĠĠĠĠĠ Ġm Paint Ġ= ĠPaint () ĊĠĠĠĠĠĠĠ Ġm Paint . is Anti Alias Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġm Bound Ġ= ĠRect () ĊĠĠĠĠĠĠĠ Ġ// è®¡ç®Ĺ æĸĩåŃĹ æīĢåľ¨ çŁ© å½¢ ï¼Į åı¯ä»¥ å¾ĹåĪ° å®½ é«ĺ ĊĠĠĠĠĠĠĠ Ġm Paint . getText Bounds ( m Code Text , Ġ 0 , Ġm Code Text . length , Ġm Bound ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset m Code Text ( m Code Text : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . m Code Text Ġ= Ġm Code Text ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Measure ( width Measure Spec : ĠInt , Ġheight Measure Spec : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Measure ( width Measure Spec , Ġheight Measure Spec ) ĊĠĠĠĠĠĠĠ Ġ// èİ·åıĸ æİ§ä»¶ å®½ é«ĺ çļĦ æĺ¾ç¤º æ¨¡å¼ı ĊĠĠĠĠĠĠĠ Ġval Ġwidth Mode Ġ= ĠView . Measure Spec . get Mode ( width Measure Spec ) ĊĠĠĠĠĠĠĠ Ġval Ġheight Mode Ġ= ĠView . Measure Spec . get Mode ( height Measure Spec ) ĊĠĠĠĠĠĠĠ Ġ// èİ·åıĸ å®½ é«ĺ çļĦ å° º å¯ ¸ åĢ¼ Ġ Ġ åĽºå®ļ åĢ¼çļĦ å®½åº¦ ĊĠĠĠĠĠĠĠ Ġval Ġwidth Size Ġ= ĠView . Measure Spec . getSize ( width Measure Spec ) ĊĠĠĠĠĠĠĠ Ġval Ġheight Size Ġ= ĠView . Measure Spec . getSize ( height Measure Spec ) ĊĠĠĠĠĠĠĠ Ġ// è®¾ç½® å®½ é«ĺ é»ĺè®¤ä¸º å»ºè®® çļĦ æľĢå°ı å®½ é«ĺ ĊĠĠĠĠĠĠĠ Ġvar Ġwidth Ġ= ĠView . getDefault Size ( suggest ed Minimum Width , Ġwidth Measure Spec ) ĊĠĠĠĠĠĠĠ Ġvar Ġheight Ġ= ĠView . getDefault Size ( suggest ed Minimum Height , Ġheight Measure Spec ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ ĠMeasure Spec çĪ¶ å¸ĥå±Ģ ä¼łéĢĴ ç»Ļ åĲİ ä»£ çļĦ å¸ĥå±Ģ è¦ģæ±Ĥ Ġ åĮħåĲ« Ġ ç¡®å®ļ å¤§å°ı åĴĮ ä¸ī ç§į æ¨¡å¼ı ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ ĠEX ACT LY ï¼ļ ä¸ĢèĪ¬ æĺ¯ è®¾ç½® äºĨ æĺİ ç¡® çļĦåĢ¼ æĪĸèĢħ æĺ¯ MATCH _ PARENT ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ ĠAT _ MO ST ï¼ļ è¡¨ç¤º åŃĲ å¸ĥå±Ģ éĻĲåĪ¶ åľ¨ ä¸Ģä¸ª æľĢå¤§ åĢ¼ åĨħ ï¼Į ä¸ĢèĪ¬ ä¸º WAR P _ CONTENT ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ ĠUNS PE CI FIED ï¼ļ è¡¨ç¤º åŃĲ å¸ĥå±Ģ æĥ³è¦ģ å¤ļ å¤§ å°± å¤ļ å¤§ ï¼Į å¾Ī å°ĳ ä½¿çĶ¨ ĊĠĠĠĠĠĠĠ Ġif Ġ( width Mode Ġ== ĠView . Measure Spec . EX ACT LY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġwidth Size ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Paint . text Size Ġ= Ġm Code Text Size . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Paint . getText Bounds ( m Code Text , Ġ 0 , Ġm Code Text . length , Ġm Bound ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Width Ġ= Ġm Bound . width (). toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemp Width Ġ= Ġ( padding Left . toFloat () Ġ+ Ġtext Width Ġ+ Ġpadding Right . toFloat ()). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġtemp Width ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( height Mode Ġ== ĠView . Measure Spec . EX ACT LY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġheight Size ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Paint . text Size Ġ= Ġm Code Text Size . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Paint . getText Bounds ( m Code Text , Ġ 0 , Ġm Code Text . length , Ġm Bound ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Height Ġ= Ġm Bound . height (). toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemp Height Ġ= Ġ( padding Top . toFloat () Ġ+ Ġtext Height Ġ+ Ġpadding Bottom . toFloat ()). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġtemp Height ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// è®¾ç½® æµĭ éĩı çļĦ å®½ é«ĺ ĊĠĠĠĠĠĠĠ Ġset Measured Dimension ( width , Ġheight ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Draw ( canvas ) ĊĊĠĠĠĠĠĠĠ Ġm Width Ġ= Ġwidth ĊĠĠĠĠĠĠĠ Ġm Height Ġ= Ġheight ĊĊĠĠĠĠĠĠĠ Ġif Ġ( bitmap Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap Ġ= Ġcreate Bitmap Validate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcanvas . draw Bitmap ( bitmap , Ġ 0 f , Ġ 0 f , Ġm Paint ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Touch Event ( event : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( event . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ DOWN Ġ-> Ġrefresh () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Touch Event ( event ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪĽå»º åĽ¾çīĩ éªĮè¯ģçłģ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcreate Bitmap Validate (): ĠBitmap Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( bitmap Ġ!= Ġnull Ġ&& Ġ! bitmap !!. is Re cyc led ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// åĽŀ æĶ¶ å¹¶ä¸Ķ ç½® ä¸º null ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap !!. recycle () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// åĪĽå»º åĽ¾çīĩ ĊĠĠĠĠĠĠĠ Ġval Ġsource Bitmap Ġ= ĠBitmap . create Bitmap ( m Width , Ġm Height , ĠBitmap . Config . ARGB _ 8 8 8 8 ) ĊĠĠĠĠĠĠĠ Ġ// åĪĽå»º çĶ» å¸ĥ ĊĠĠĠĠĠĠĠ Ġval Ġcanvas Ġ= ĠCanvas ( source Bitmap ) ĊĠĠĠĠĠĠĠ Ġ// çĶ» ä¸Ĭ èĥĮæĻ¯ é¢ľèī² ĊĠĠĠĠĠĠĠ Ġcanvas . draw Color ( m Code Background ) ĊĠĠĠĠĠĠĠ Ġ// åĪĿå§ĭåĮĸ æĸĩåŃĹ çĶ» ç¬Ķ ĊĠĠĠĠĠĠĠ Ġm Paint . stroke Width Ġ= Ġ 3 f ĊĠĠĠĠĠĠĠ Ġm Paint . text Size Ġ= Ġm Code Text Size . toFloat () ĊĠĠĠĠĠĠĠ Ġ// æµĭ éĩı éªĮè¯ģçłģ åŃĹç¬¦ä¸² æĺ¾ç¤º çļĦ å®½åº¦ åĢ¼ ĊĠĠĠĠĠĠĠ Ġval Ġtext Width Ġ= Ġm Paint . measure Text ( m Code Text ) ĊĠĠĠĠĠĠĠ Ġ// çĶ» ä¸Ĭ éªĮè¯ģçłģ ĊĠĠĠĠĠĠĠ Ġval Ġlength Ġ= Ġm Code Text . length ĊĠĠĠĠĠĠĠ Ġ// è®¡ç®Ĺ ä¸Ģä¸ª åŃĹç¬¦ çļĦ æīĢ åįł ä½įç½® ĊĠĠĠĠĠĠĠ Ġval Ġchar Length Ġ= Ġtext Width Ġ/ Ġlength ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġoffset Degree Ġ= Ġm Random . nextInt ( 1 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// è¿ĻéĩĮ åıª ä¼ļ äº§çĶŁ 0 åĴĮ 1 ï¼Į å¦Ĥæŀľ æĺ¯ 1 éĤ£ä¹Ī æŃ£ æĹ ĭ è½¬ æŃ£ è§Ĵ åº¦ ï¼Į åĲ¦åĪĻ æĹ ĭ è½¬ è´Ł è§Ĵ åº¦ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoffset Degree Ġ= Ġif Ġ( m Random . nextInt ( 2 ) Ġ== Ġ 1 ) Ġoffset Degree Ġelse Ġ- offset Degree ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// çĶ¨æĿ¥ ä¿ĿåŃĺ Canvas çļĦ çĬ¶æĢģ ãĢĤ save ä¹ĭåĲİ ï¼Į åı¯ä»¥ è°ĥçĶ¨ Canvas çļĦ å¹³ ç§» ãĢģ æĶ¾ ç¼© ãĢģ æĹ ĭ è½¬ ãĢģ éĶĻ åĪĩ ãĢģ è£ ģ åī ª çŃī æĵįä½ľ ãĢĤ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . save () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// è®¾ç½® æĹ ĭ è½¬ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . rotate ( offset Degree . toFloat (), Ġ( m Width Ġ/ Ġ 2 ). toFloat (), Ġ( m Height Ġ/ Ġ 2 ). toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ç»Ļ çĶ» ç¬Ķ è®¾ç½® éļıæľº é¢ľèī² ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Paint . set ARGB ( 2 5 5 , Ġm Random . nextInt ( 2 0 0 ) Ġ+ Ġ 2 0 , Ġm Random . nextInt ( 2 0 0 ) Ġ+ Ġ 2 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Random . nextInt ( 2 0 0 ) Ġ+ Ġ 2 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// è®¾ç½® åŃĹ ä½ĵ çļĦ ç»ĺ åĪ¶ ä½įç½® ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Text ( m Code Text [ i Ġ- Ġ 1 ]. toString (), Ġ( i Ġ- Ġ 1 ) Ġ* Ġchar Length Ġ+ Ġ 5 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Height Ġ* Ġ 4 Ġ/ Ġ 5 f , Ġm Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// çĶ¨æĿ¥ æģ ¢å¤į Canvas ä¹ĭåīį ä¿ĿåŃĺ çļĦ çĬ¶æĢģ ãĢĤ éĺ² æŃ¢ save åĲİ å¯¹ Canvas æī§è¡Į çļĦ æĵįä½ľ å¯¹ åĲİ ç»Ń çļĦ ç»ĺ åĪ¶ æľī å½±åĵį ãĢĤ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . restore () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// éĩįæĸ° è®¾ç½® çĶ» ç¬Ķ ĊĠĠĠĠĠĠĠ Ġm Paint . set ARGB ( 2 5 5 , Ġm Random . nextInt ( 2 0 0 ) Ġ+ Ġ 2 0 , Ġm Random . nextInt ( 2 0 0 ) Ġ+ Ġ 2 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Random . nextInt ( 2 0 0 ) Ġ+ Ġ 2 0 ) ĊĠĠĠĠĠĠĠ Ġm Paint . stroke Width Ġ= Ġ 1 f ĊĠĠĠĠĠĠĠ Ġ// äº§çĶŁ å¹² æī ° æķĪæŀľ 1 Ġ ï¼ į ï¼ į Ġ å¹² æī ° çĤ¹ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġm Point Num ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Point ( canvas , Ġm Paint ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// çĶŁæĪĲ å¹² æī ° æķĪæŀľ 2 Ġ ï¼ į ï¼ į Ġ å¹² æī ° çº¿ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġm Line Num ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Line ( canvas , Ġm Paint ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsource Bitmap ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠçĶŁæĪĲ å¹² æī ° çĤ¹ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġdraw Point ( canvas : ĠCanvas , Ġpaint : ĠPaint ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpoint F Ġ= ĠPoint F ( m Random . nextInt ( m Width ). toFloat (), Ġm Random . nextInt ( m Height ). toFloat ()) ĊĠĠĠĠĠĠĠ Ġcanvas . draw Point ( point F . x , Ġpoint F . y , Ġpaint ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠçĶŁæĪĲ å¹² æī ° çº¿ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġdraw Line ( canvas : ĠCanvas , Ġpaint : ĠPaint ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstart X Ġ= Ġm Random . nextInt ( m Width ) ĊĠĠĠĠĠĠĠ Ġval Ġstart Y Ġ= Ġm Random . nextInt ( m Height ) ĊĠĠĠĠĠĠĠ Ġval Ġend X Ġ= Ġm Random . nextInt ( m Width ) ĊĠĠĠĠĠĠĠ Ġval Ġend Y Ġ= Ġm Random . nextInt ( m Height ) ĊĠĠĠĠĠĠĠ Ġcanvas . draw Line ( start X . toFloat (), Ġstart Y . toFloat (), Ġend X . toFloat (), Ġend Y . toFloat (), Ġpaint ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ éªĮè¯ģçłģ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġlength ĠĠ ĠçĶŁæĪĲ éļıæľº æķ° çļĦ éķ¿åº¦ ĊĠĠĠĠ Ġ* Ġ@ param Ġcontains Ġæĺ¯åĲ¦ åĮħåĲ« åŃĹç¬¦ä¸² ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget Validation Code ( length : ĠInt , Ġcontains : ĠBoolean ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġval Ġrandom Ġ= ĠRandom () ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġlength ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( contains ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// åŃĹ æ¯į æĪĸ æķ°åŃĹ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcode Ġ= Ġif Ġ( random . nextInt ( 2 ) Ġ% Ġ 2 Ġ== Ġ 0 ) Ġ" char " Ġelse Ġ" num " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// åŃĹç¬¦ä¸² ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(" char ". equals ( code , Ġignore Case Ġ= Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// å¤§ åĨĻ æĪĸ å°ı åĨĻ åŃĹ æ¯į ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchoice Ġ= Ġif Ġ( random . nextInt ( 2 ) Ġ% Ġ 2 Ġ== Ġ 0 ) Ġ 6 5 Ġelse Ġ 9 7 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ+= Ġ( choice Ġ+ Ġrandom . nextInt ( 2 6 )). to Char () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(" num ". equals ( code , Ġignore Case Ġ= Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ+= Ġrandom . nextInt ( 1 0 ). toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ+= Ġrandom . nextInt ( 1 0 ). toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪ¤æĸŃ éªĮè¯ģçłģ æĺ¯åĲ¦ ä¸Ģèĩ´ Ġ å¿½ çķ¥ å¤§å°ı åĨĻ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġis Equals IgnoreCase ( Code String : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Code Text . equals ( Code String , Ġignore Case Ġ= Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪ¤æĸŃ éªĮè¯ģçłģ æĺ¯åĲ¦ ä¸Ģèĩ´ Ġä¸į å¿½ çķ¥ å¤§å°ı åĨĻ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġis Equals ( Code String : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Code Text Ġ== ĠCode String ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠæıĲ ä¾Ľ å¤ĸéĥ¨ è°ĥçĶ¨ çļĦ åĪ·æĸ° æĸ¹æ³ķ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġrefresh () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Code Text Ġ= Ġget Validation Code ( m Code Length , Ġis Contain Char ) ĊĠĠĠĠĠĠĠ Ġbitmap Ġ= Ġcreate Bitmap Validate () ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} Ċ Ċ }