Android 验证码:数字序列、计算结果
来源:互联网 发布:xp禁止程序访问网络 编辑:程序博客网 时间:2024/05/18 01:03
1.数字序列验证码
昨天写了个小Demo,实现了随机生成验证码,和锁定EditText两个小功能,先看一下效果图:
锁定EditText在我们不需要用户编辑EditText内容的时候可以用到,实现还是很简单的,一行代码:
etLock.setEnabled(false);
随机生成验证码,主要是用了Random函数,以及将View转为Bitmap的逻辑,也没有难点。
还是上传一下代码吧,是用Android Studio写的。链接:代码下载
2.计算验证码
类似于CSDN的计算验证码,在之前的随机数字验证码Demo上扩展的,明早贴程序。
效果图:
Main.java:
package com.zms.textlock;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Matrix;import android.support.v7.app.ActionBarActivity;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.ImageView;import android.widget.TextView;import java.util.Random;public class Main extends ActionBarActivity { private Button btnLock; private EditText etLock; private String numStrTmp = ""; private String numStr = ""; private int[] numArray = new int[4]; private int[] colorArray = new int[6]; private TextView tvHideA; private TextView tvHideB; private TextView tvHideC; private TextView tvHideD; private TextView tvHideE; private TextView tvHideF; private TextView tvHideG; private ImageView ivNumA; private ImageView ivNumB; private ImageView ivNumC; private ImageView ivNumD; private ImageView ivNumE; private ImageView ivNumF; private ImageView ivNumG; private Button btnCheck; private TextView tvCheck; private EditText etCheck; // 计算类型的验证码 private String[] strVerify = new String[3]; private int[] intVerify = new int[3]; private int intResult = -100; private EditText etVerify; private Button btnVerify; private TextView tvVerify; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); btnLock = (Button) findViewById(R.id.btnLock); etLock = (EditText) findViewById(R.id.etLock); btnLock.setOnClickListener(new onClickListenerImp()); tvHideA = (TextView) findViewById(R.id.tvHideA); tvHideB = (TextView) findViewById(R.id.tvHideB); tvHideC = (TextView) findViewById(R.id.tvHideC); tvHideD = (TextView) findViewById(R.id.tvHideD); tvHideE = (TextView) findViewById(R.id.tvHideE); tvHideF = (TextView) findViewById(R.id.tvHideF); tvHideG = (TextView) findViewById(R.id.tvHideG); ivNumA = (ImageView) findViewById(R.id.ivNumA); ivNumB = (ImageView) findViewById(R.id.ivNumB); ivNumC = (ImageView) findViewById(R.id.ivNumC); ivNumD = (ImageView) findViewById(R.id.ivNumD); // 计算类型的验证码 ivNumE = (ImageView) findViewById(R.id.ivNumE); ivNumF = (ImageView) findViewById(R.id.ivNumF); ivNumG = (ImageView) findViewById(R.id.ivNumG); etVerify = (EditText) findViewById(R.id.etVerify); btnVerify = (Button) findViewById(R.id.btnVerify); btnVerify.setOnClickListener(new onClickListenerImp()); tvVerify = (TextView) findViewById(R.id.tvVerify); tvCheck = (TextView) findViewById(R.id.tvCheck); etCheck = (EditText) findViewById(R.id.etCheck); btnCheck = (Button) findViewById(R.id.btnCheck); btnCheck.setOnClickListener(new onClickListenerImp()); setNum(); setVerify(); } /** * 计算类型的验证码 */ private void setVerify() { initStrVerify(); tvHideE.setText(strVerify[0]); tvHideE.setTextColor(randomColor()); tvHideG.setText(strVerify[1]); tvHideG.setTextColor(randomColor()); tvHideF.setText(strVerify[2]); tvHideF.setTextColor(randomColor()); // Num 1 Matrix matrixE = new Matrix(); matrixE.reset(); matrixE.setRotate(randomAngle()); Bitmap bmNumE = Bitmap.createBitmap(getBitmapFromView(tvHideE, 50, 50), 0, 0, 50, 50, matrixE, true); ivNumE.setImageBitmap(bmNumE); //Operator Matrix matrixF = new Matrix(); matrixF.reset(); matrixF.setRotate(randomAngle()); Bitmap bmNumF = Bitmap.createBitmap(getBitmapFromView(tvHideF, 70, 50), 0, 0, 70, 50, matrixF, true); ivNumF.setImageBitmap(bmNumF); // Num2 Matrix matrixG = new Matrix(); matrixG.reset(); matrixG.setRotate(randomAngle()); Bitmap bmNumG = Bitmap.createBitmap(getBitmapFromView(tvHideG, 50, 50), 0, 0, 50, 50, matrixG, true); ivNumG.setImageBitmap(bmNumG); } private void initStrVerify() { // 获得两个不相等运算数值:0-9 do { intVerify[0] = new Random().nextInt(10); intVerify[1] = new Random().nextInt(10); } while (intVerify[0] == intVerify[1]); // 获得运算符号:+,-,x intVerify[2] = new Random().nextInt(3); if (intVerify[2] == 0) { intResult = intVerify[0] + intVerify[1]; strVerify[2] = "加上"; } else if (intVerify[2] == 1) { intResult = intVerify[0] - intVerify[1]; strVerify[2] = "减去"; } else if (intVerify[2] == 2) { intResult = intVerify[0] * intVerify[1]; strVerify[2] = "乘以"; } else { intResult = -100; strVerify[2] = "呵呵"; } strVerify[0] = numToCharacter(intVerify[0]); strVerify[1] = numToCharacter(intVerify[1]); } private String numToCharacter(int num) { switch (num) { case 0: return "零"; case 1: return "一"; case 2: return "二"; case 3: return "三"; case 4: return "四"; case 5: return "五"; case 6: return "六"; case 7: return "七"; case 8: return "八"; case 9: return "九"; default: return "错"; } } private class onClickListenerImp implements View.OnClickListener { @Override public void onClick(View view) { if (view == btnLock) { if (etLock.isEnabled()) { etLock.setEnabled(false); btnLock.setText("解锁"); } else { etLock.setEnabled(true); btnLock.setText("锁定"); } } else if (view == btnCheck) { if (etCheck.getText().toString() != null && etCheck.getText().toString().trim().length() > 0) { tvCheck.setVisibility(View.VISIBLE); if (numStr.equals(etCheck.getText().toString())) { tvCheck.setText("输入正确"); tvCheck.setTextColor(Color.GREEN); } else { tvCheck.setText("输入错误"); tvCheck.setTextColor(Color.RED); } } else { setNum(); tvCheck.setVisibility(View.GONE); } } else if (view == btnVerify) { if (etVerify.getText().toString() != null && etVerify.getText().toString().trim().length() > 0) { tvVerify.setVisibility(View.VISIBLE); if (etVerify.getText().toString().equals(String.valueOf(intResult))) { tvVerify.setText("正确"); tvVerify.setTextColor(Color.GREEN); } else { tvVerify.setText("错误"); tvVerify.setTextColor(Color.RED); } } else { setVerify(); tvVerify.setVisibility(View.GONE); } } } } public void initNum() { numStr = ""; numStrTmp = ""; for (int i = 0; i < numArray.length; i++) { int numIntTmp = new Random().nextInt(10); numStrTmp = String.valueOf(numIntTmp); numStr = numStr + numStrTmp; numArray[i] = numIntTmp; } } public void setNum() { initNum(); tvHideA.setText("" + numArray[0]); tvHideA.setTextColor(randomColor()); tvHideB.setText("" + numArray[1]); tvHideB.setTextColor(randomColor()); tvHideC.setText("" + numArray[2]); tvHideC.setTextColor(randomColor()); tvHideD.setText("" + numArray[3]); tvHideD.setTextColor(randomColor()); // Num 1 Matrix matrixA = new Matrix(); matrixA.reset(); matrixA.setRotate(randomAngle()); Bitmap bmNumA = Bitmap.createBitmap(getBitmapFromView(tvHideA, 20, 50), 0, 0, 20, 50, matrixA, true); ivNumA.setImageBitmap(bmNumA); // Num 2 Matrix matrixB = new Matrix(); matrixB.reset(); matrixB.setRotate(randomAngle()); Bitmap bmNumB = Bitmap.createBitmap(getBitmapFromView(tvHideB, 20, 50), 0, 0, 20, 50, matrixB, true); ivNumB.setImageBitmap(bmNumB); // Num 3 Matrix matrixC = new Matrix(); matrixC.reset(); matrixC.setRotate(randomAngle()); Bitmap bmNumC = Bitmap.createBitmap(getBitmapFromView(tvHideC, 20, 50), 0, 0, 20, 50, matrixC, true); ivNumC.setImageBitmap(bmNumC); // Num 4 Matrix matrixD = new Matrix(); matrixD.reset(); matrixD.setRotate(randomAngle()); Bitmap bmNumD = Bitmap.createBitmap(getBitmapFromView(tvHideD, 20, 50), 0, 0, 20, 50, matrixD, true); ivNumD.setImageBitmap(bmNumD); } public int randomAngle() { return 20 * (new Random().nextInt(5) - new Random().nextInt(3)); } public int randomColor() { colorArray[0] = 0xFF000000; // BLACK colorArray[1] = 0xFFFF00FF; // MAGENTA colorArray[2] = 0xFFFF0000; // RED colorArray[3] = 0xFF00FF00; // GREEN colorArray[4] = 0xFF0000FF; // BLUE colorArray[5] = 0xFF00FFFF; // CYAN //colorArray[6] = 0xFFFFFF00; // YELLOW:看不清楚 int randomColorId = new Random().nextInt(6); return colorArray[randomColorId]; } public static Bitmap getBitmapFromView(View view, int width, int height) { int widthSpec = View.MeasureSpec.makeMeasureSpec(width, View.MeasureSpec.EXACTLY); int heightSpec = View.MeasureSpec.makeMeasureSpec(height, View.MeasureSpec.EXACTLY); view.measure(widthSpec, heightSpec); view.layout(0, 0, width, height); Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); view.draw(canvas); return bitmap; } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); }}
Main.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context=".Main"> <TextView android:layout_width="wrap_content" android:text="锁定EditText内容:" android:layout_height="wrap_content" /> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <EditText android:id="@+id/etLock" android:layout_width="200dp" android:layout_height="wrap_content" /> <Button android:id="@+id/btnLock" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="锁定" /> </LinearLayout> <TextView android:layout_marginTop="50dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="数字类型验证码:" /> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <LinearLayout android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:id="@+id/tvHideA" android:layout_width="70dp" android:layout_height="70dp" android:textSize="30dp" android:gravity="center" android:visibility="gone" /> <TextView android:id="@+id/tvHideB" android:layout_width="70dp" android:layout_height="70dp" android:textSize="30dp" android:gravity="center" android:visibility="gone" /> <TextView android:id="@+id/tvHideC" android:layout_width="70dp" android:layout_height="70dp" android:textSize="30dp" android:gravity="center" android:visibility="gone" /> <TextView android:id="@+id/tvHideD" android:layout_width="70dp" android:layout_height="70dp" android:textSize="30dp" android:gravity="center" android:visibility="gone" /> </LinearLayout> <LinearLayout android:layout_width="wrap_content" android:orientation="horizontal" android:layout_height="wrap_content"> <ImageView android:id="@+id/ivNumA" android:layout_width="50dp" android:layout_height="70dp" /> <ImageView android:id="@+id/ivNumB" android:layout_width="50dp" android:layout_height="70dp" /> <ImageView android:id="@+id/ivNumC" android:layout_width="50dp" android:layout_height="70dp" /> <ImageView android:id="@+id/ivNumD" android:layout_width="50dp" android:layout_height="70dp" /> <EditText android:id="@+id/etCheck" android:hint="验证码" android:inputType="number" android:layout_width="80dp" android:layout_height="wrap_content" /> <Button android:id="@+id/btnCheck" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="确定" /> <TextView android:id="@+id/tvCheck" android:text="结果" android:visibility="gone" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> </LinearLayout> <TextView android:layout_width="wrap_content" android:text="计算类型验证码:" android:layout_marginTop="50dp" android:layout_height="wrap_content" /> <LinearLayout android:layout_width="fill_parent" android:orientation="horizontal" android:layout_height="wrap_content"> <TextView android:id="@+id/tvHideE" android:visibility="gone" android:textSize="25dp" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/tvHideF" android:visibility="gone" android:textSize="30dp" android:layout_width="70dp" android:layout_height="wrap_content" /> <TextView android:id="@+id/tvHideG" android:visibility="gone" android:textSize="25dp" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <ImageView android:id="@+id/ivNumE" android:layout_width="50dp" android:layout_height="70dp" /> <ImageView android:id="@+id/ivNumF" android:layout_width="70dp" android:layout_height="70dp" /> <ImageView android:id="@+id/ivNumG" android:layout_width="50dp" android:layout_height="70dp" /> <EditText android:id="@+id/etVerify" android:hint="计算结果" android:inputType="numberSigned" android:layout_width="80dp" android:layout_height="wrap_content" /> <Button android:id="@+id/btnVerify" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="校验" /> <TextView android:layout_width="wrap_content" android:text="结果" android:visibility="gone" android:id="@+id/tvVerify" android:layout_height="wrap_content" /> </LinearLayout></LinearLayout>
转载请注明出处:周木水的CSDN博客 http://blog.csdn.net/zhoumushui
0 0
- Android 验证码:数字序列、计算结果
- 使用jni计算两个数字的结果
- 将数字格式的计算结果转换为汉字结果
- Android自定义数字验证码输入框
- 一条语句计算所有递增序列的结果
- 将数字格式的计算结果转为汉字格式
- 写个小程序计算猜数字问题的结果
- 数字验证码生成
- 数字验证码.asp
- 中文数字验证码
- JSP数字验证码
- 生成数字验证码
- 数字验证码
- 生成数字验证码
- JSP数字 验证码
- 数字验证码
- 数字验证码
- 纯数字验证码
- PHP网站的安全性问题
- 字符串操作的那些事情
- Fedora网络配置
- 图论中的最小生成树算法
- C++编译错误
- Android 验证码:数字序列、计算结果
- Tomcat内存设置详解
- 关于android性能优化问题
- X5 获取前台所有data数据 和后台的 table 使用
- 气象局天气预报信息接口
- vmware 下虚拟机的批量复制并配置网络
- 怎么样才叫软件团队开发
- iPhone 6/6 Plus 出现后,如何改进工作流以实现一份设计稿支持多个尺寸?
- IOCP模型与网络编程