Android|随机验证码生成案例(含源码)
程序员文章站
2022-03-22 18:01:28
...
大家好,我是执念。今天学习随机验证码生成,看起来跟安卓有关系,其实跟安卓没啥大关系就是一道java的算法题。下面就来深层次分析如何实现。先看题面
题目再现
案例效果
实验步骤
创建新项目My tweApplication
点进Project—>Empty Activity—>然后名字改下,finish即可。成功之后,点击箭头运行程序。
搭建Activity_main.xml
博主选择的是线性布局,外加两个控件。代码下方对其作进一步分析
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="生成验证码为:"
android:id="@+id/txt"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btn"
android:text="按钮生成" />
</LinearLayout>
LinearLayout详解
这是线性布局的标记,除了简单的width与height,还有它的方向也可以考虑进去。这里选择的垂直
TextView类
就是案例效果中生成的代码效果最后承载的结果,id一定要设置,因为这可以在java代码中可以操控。获得它的句柄
Button类
响应单击事件,width与height基础设置,id一定要设置,java要获得它的句柄。text是为了用户提示!
配置MainActivity.java代码
本质java代码是一道算法题,掌握原理没有难度。这道算法题核心是三步
- 初始化字典序列也就是大写字母与数字
- 不重复进行随机模拟
- 打印随机验证码
在java转安卓代码的时候也有三步: - 确定继承对象,找准相应接口
- **窗体,获得相应句柄
- 调用方法,写好相应的事件
- 输出结果,迎接喜悦!
package com.example.mytweapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity implements View.OnClickListener {
TextView txt;
Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setViews();
}
public void setViews(){
txt = (TextView)findViewById(R.id.txt);
btn = (Button)findViewById(R.id.btn);
btn.setOnClickListener(this);
}
public void onClick(View view){
String str = "生成验证码为:";
char arr[] = new char[36];
int ncnt = 0;
for(char i='A';i<='Z';i++)
arr[ncnt++] = i;
for(char i='0';i<='9';i++)
arr[ncnt++] = i;
int pos ;
while(true){
pos = (int)(Math.random() * (35-0+1)+0);
if(arr[pos]!='2' && arr[pos]!='L' && arr[pos]!='Z' && arr[pos]!= '1' && arr[pos] !='O' && arr[pos]!='0')
break;
}
int cnt = 0;
int n = 5;
char b[] = new char[5];
b[cnt]=arr[pos];
str += b[cnt];
cnt++;
while(cnt<n)
{
int flag = 1;
pos = (int )(Math.random()*(35-0+1)+0);
switch(arr[pos])
{
case 'O':
case '0':
case '1':
case 'L':
case '2':
case 'Z':
flag = 0;
}
for(int j=0;j<cnt;j++) {
if(arr[pos] == b[j])
{
flag = 0;
break;
}
}
if(flag == 1)
{
b[cnt]=arr[pos];
str += b[cnt];
cnt++;
}
}
txt.setText(str);
}
}
点击运行,测试结果
总结
实现代码只需要三步
- 创建新项目跑通hello world
- 布局activity_main.xml文件
- 做好相应的java代码事件
- 点击运行,收获喜悦!
很高兴博文能帮助到大家!
上一篇: Android|BMI体质计算器实现(附测试源码)
下一篇: 代码雨 黑客帝国