1. 程式人生 > >Android生成隨機驗證碼技術

Android生成隨機驗證碼技術

package com.example.randomcode;
import java.util.Random;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;

/**
 *	專案名稱/版本號:RandomCode/v1.0
 *	包   名:com.example.randomcode
 *	類描述:(1)生成一組隨機數;
 *	  (2)設定隨機數風格,並繪製canvas.drawText()到點陣圖上
 *	  (3)再在點陣圖上繪製風格變化的干擾線條
 *	建立人:jiangdongguo
 *	建立時間:2015-6-6 下午3:22:41
 * 部落格地址:http://blog.csdn.net/u012637501
 */
public class createCode {
 private static final char[] CHARS = { '1', '2', '3', '4', '5', '6', '7',
  '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'j', 'k', 'l',
  'm', 'n', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
  'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
  'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };	 //預定隨機數庫
 private static final int CodeLength = 4; // 隨機數個數
 private static final int LineNumber =8;	 //線條數目
 private static final int WIDTH =140, HEIGHT = 80; // 點陣圖長、寬
 private static final int FontSize = 40;	 //隨機數字體大小
 private static int base_padding_left ;
 private static final int random_padding_left = 23,
   base_padding_top = 45, random_padding_top = 10;
 private static Random random = new Random();
 
 /*********************************************************************************
  *	方  法 名:createRandomBitmap
  *	功能描述:生成隨機驗證碼檢視
  *  Data     :2015-6-6[J]
 *********************************************************************************/
 public static Bitmap createRandomBitmap(){
  /**
   * (1)生成一組隨機數
   * */
  String code = createRandomText();	 //生成4個隨機數
  /***
   * (2)建立點陣圖Bitmap,畫布Canvas,初始化畫筆Paint
   * */
  Bitmap bitmap = Bitmap.createBitmap(WIDTH, HEIGHT, Config.ARGB_8888);	//建立點陣圖,並指定其長、寬
  Canvas canvas = new Canvas(bitmap);	 //建立指定點陣圖的畫布
  canvas.drawColor(Color.WHITE);	 //設定畫布的背景為白色
  Paint paint = new Paint();	 //定義畫筆paint
  paint.setTextSize(FontSize);	 //設定畫筆字型大小
  /**
   * (3)生成四個隨機數風格各異(顏色、位置、形狀)的點陣圖
   * */
  base_padding_left = 20;
  for(int i=0;i<code.length();i++){
   //設定一個隨機數的風格
   int color = RandomColor();
   paint.setColor(color);	 //設定(畫筆)該隨機數的顏色
   paint.setFakeBoldText(false);//設定畫筆為非粗體
   float skewX = random.nextInt(11)/10;
   skewX = random.nextBoolean() ? skewX :(-skewX);
   paint.setTextSkewX(skewX);	//設定字型傾斜方向(負數表示右斜,整數表示左斜)
   //設定一個隨機數位置
//	 int padding_left = base_padding_left + random.nextInt(random_padding_left);
   int padding_top =base_padding_top + random.nextInt(random_padding_top);
   //繪製該隨機數
   canvas.drawText(code.charAt(i)+"" ,base_padding_left, padding_top, paint);
   base_padding_left += random_padding_left;
  }
  /**
   * (4)繪製線條
   **/
  for(int i=0;i<LineNumber;i++){
   mdrawLine(canvas, paint);
  }
  canvas.save(Canvas.ALL_SAVE_FLAG);	//儲存
  canvas.restore();
  return bitmap;
 }
 
 /*********************************************************************************
  *	方  法 名:createRandomText
  *	功能描述:
  *  Data     :2015-6-6[J]
  *********************************************************************************/
 private static String createRandomText(){
  StringBuilder buffer = new StringBuilder();
  for(int i=0;i<CodeLength;i++){
   buffer.append(CHARS[random.nextInt(CHARS.length)]);	//CHARS下標限定在0~CodeLength之間
  }
  return buffer.toString();	 //生成4個隨機數
 }
 /********************************************************************************
  *	方  法 名:RandomColor
  *	功能描述:生成一個隨機顏色
  *  Data     :2015-6-6[J]
  *********************************************************************************/
 private static int RandomColor(){
  int red = random.nextInt(256);	 //紅色:0~256之間
  int green = random.nextInt(256);	 //綠色:0~256之間
  int blue = random.nextInt(256);	 //藍色:0~256之間
  return Color.rgb(red, green, blue);	//返回生成隨機顏色值
 }
 /*********************************************************************************
  *	方  法 名:mdrawLine
  *	功能描述:繪製一條線條,引數:當前畫布,當前畫筆
  *  Data     :2015-6-6[J]
  **********************************************************************************/
 private static void mdrawLine(Canvas canvas,Paint paint){
  //a.設定該線條顏色
  int color = RandomColor();
  paint.setColor(color);
  //b.設定該隨機數的位置(起點和終點,0~WIDTH,0~HEIGHT)
  int startX = random.nextInt(WIDTH);
  int startY = random.nextInt(HEIGHT);
  int stopX = random.nextInt(WIDTH);
  int stopY = random.nextInt(HEIGHT);
  canvas.drawLine(startX, startY, stopX, stopY, paint);
 }
}

相關推薦

Android生成隨機驗證技術

package com.example.randomcode; import java.util.Random; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.graphics.Can

Python 生成隨機驗證

安裝 alt rndc 字母 .text key red 圖片查看 fill Python生成隨機驗證碼 Python生成隨機驗證碼,需要使用PIL模塊. 安裝: 1 pip3 install pillow 基本使用 1. 創建圖片

生成隨機驗證的方法

隨機驗證碼 clas pan 我們 -s string elif else 驗證 1、借助列表 import random def random_code(): random_list = [] for i in range(4): ra

用Canvas生成隨機驗證(後端前端都可以)

ntb inf pre text contex back data listen nload 一 、使用前端生成驗證碼 <!DOCTYPE html> <html> <head> <meta charse

生成隨機驗證

emp OS [] () 隨機 style odin utf str #coding=utf-8方法一import random checkcode=‘‘for i in range(4): #0,1,2,3 current=random.randrange(

python生成隨機驗證

python生成隨機密碼 random模塊生成隨機密碼 一、生成隨機驗證碼(純數字及字母加數字): import random import string checkcod=‘‘ for i in range(5): #5位驗證碼 ‘‘‘ #純數字驗證碼 #隨機值1-9取可

Servlet生成隨機驗證

package com.yc.servlet; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.I

Django PIL模組(生成隨機驗證

PIL簡介 什麼是PIL PIL:是Python Image Library的縮寫,影象處理的模組。主要的類包括Image,ImageFont,ImageDraw,ImageFilter PIL的匯入 首先需要安裝一下pillow包

微信小程序 canvas 生成隨機驗證

微信 font mco 字體顏色 字體大小 sdn 隨機 ref radi https://blog.csdn.net/qq_16646819/article/details/81020245?utm_source=blogxgwz0 js 1 // pages/

使用python pillow模組生成隨機驗證

主要用來生成驗證碼,如果要在頁面中使用還要嵌入你所寫的框架` import random,string from PIL import Image,ImageDraw,ImageFilter,ImageFont class check_code(object

JAVA生成隨機驗證

一、生成隨機圖片的java工具類 package com.xh.commen; import java.awt.*; import java.awt.image.BufferedImage; public class ImageUtil { private

Struts2生成隨機驗證圖片(自定義結果集StrutsResultSupport)

1.工程資料夾如下: 2. HelloAction.java程式碼如下。StrutsResultSupport是struts的自定義結果集。我們的HelloAction類只要繼承StrutsResultSupport抽象類並實現doExecute方法,就可以把doExecute方法裡面的驗

python基礎:練習題:生成隨機驗證

練習題:生成隨機的四位驗證碼 import random def yzm(): code=’’ #拼接生成的隨機數字或者字母 for i in range(4): ‘’‘迴圈四次生成四個字母或者數字’’’ # 生成數字 num=random.randint(0,9) # 生成字母 chr 將

java生成隨機驗證(ASCII)

最近做的一些東西,在做請求時,要偽造一些隨機碼,所以就寫了個方法,網上實現也比較多,這裡只是提供自己的這個相對來說比較簡單,主要是看實現思路,主要是利用java的 Random類 1. 只生成數字驗證碼 因為是用於驗證碼,所以首位為0也是可以的,單純的用random.nextIn

PHP註冊登入:包括資料存入資料庫,生成隨機驗證

自己學習html、CSS和PHP,在給自己的網站寫註冊和登入的時候遇到了不小的麻煩,而且現在也沒弄清楚,暫時可能不再研究這方面了,所以先把我學會的部分記錄下來。 首先是資料連線快捷鍵"ctrl+R"開啟執行,輸入services.msc回車,開啟服務,找到MySQL57,檢

JSP實現生成隨機驗證

程式碼直接拷貝就能用 <%@ page contentType="image/jpeg" import="java.util.*,java.awt.*,java.io.*,java.awt.image.*,javax.imageio.*" pageEncoding

Java生成隨機驗證圖片並進行Base64編碼

import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints;

生成6位的隨機驗證

bsp 生成 current 實例 imp import style += range 要求:生成6位的字母和數字組成的隨機驗證碼。 實例1: 1 import random 2 identify_code=‘‘ 3 for i in range(1): 4

5、簡單隨機驗證生成練習

for 設定 src png log 大寫 cnblogs style 驗證 import random # 設定一個空字符串 st = "" # 遍歷6次函數 for i in range(6): # 設定一個隨機變量0或1 i1 = random.ra

生成4位隨機驗證工具類

urn build public har spa java dom 個人 ont keyUtil: package com.duocy.util; import java.util.Random; public class keyUtil {public Str