Android產生隨機驗證碼技術
在Android用戶端應用開發中,往往需要簡訊驗證碼或者隨機驗證碼來限制使用者的操作或者認證。簡訊驗證碼是為了對使用者進行認證,主要通過Http協議等通訊協定實現;隨機驗證碼很大程度是為限制或者提示使用者相關操作。隨機驗證碼的驗證主要有兩種方式:請求伺服器驗證,本地驗證。比如,在使用者向伺服器發送登入請求,我們通過隨機驗證碼(本地驗證即可)限制使用者隨意按請求按鈕,示範如下: 源碼實戰 (1)src/.../createCode.java 功能:使用Random、Canvas、Paint及其相關方法建立包含4個顯示風格、位置不同字元的位元影像。
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注釋:建立隨機字元位元影像的關鍵在於設計每個字元在位元影像上的顯示位置,若每個字元顯示的上下、左右邊距不合適,字元將在位元影像上顯示不出來。特別要注意每個字元的左右邊距,代碼如下: private static int base_padding_left ; private static final int random_padding_left = 23, base_padding_top = 45, random_padding_top = 10; base_padding_left = 20; //第一個字元到位元影像左邊界距離 for(int i=0;i(2)src/.../MainActivity.java功能:將建立好的位元影像顯示到介面布局的ImageButton組件中package com.example.randomcode;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.ImageButton;public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final ImageButton imageButton = (ImageButton)findViewById(R.id.myImage); imageButton.setImageBitmap(createCode.createRandomBitmap()); imageButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { imageButton.setImageBitmap(createCode.createRandomBitmap()); } }); }}(3)res/layout/main.xml
(4)效果示範