晚上12点进去提交申请要填图形验证码生成是什么情况

Android studio 实现登录注册图形随机验证码
最近研究了一个图片验证码的小功能:
验证码一般是防止有人利用机器人自动批量注册、
对特定的注册用户用特定程序暴力破解方式进行不断的登陆、灌水。
因为验证码是一个混合了数字或符号的图片,
人眼看起来都费劲,机器识别起来就更困难
给上activity_main.xml布局代码:
&RelativeLayout 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&
tools:context=&${relativePackage}.${activityClass}& &
&LinearLayout
android:layout_width=&match_parent&
android:layout_height=&match_parent&
android:layout_marginLeft=&10dp&
android:orientation=&vertical&&
&ImageView
android:id=&@+id/image&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:layout_marginTop=&10dp&
android:src=&@drawable/ic_launcher&/&
android:id=&@+id/et&
android:layout_width=&match_parent&
android:layout_height=&wrap_content&
android:layout_marginTop=&10dp&
android:hint=&输入验证码&/&
android:id=&@+id/btn&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:layout_marginTop=&10dp&
android:text=&获得验证码&/&
android:id=&@+id/btn_submit&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:layout_marginTop=&10dp&
android:text=&提交&/&
&/LinearLayout&
&/RelativeLayout&
再上mainactivity代码:
package com.example.
import android.app.A
import android.graphics.B
import android.os.B
import android.text.TextU
import android.util.L
import android.view.V
import android.view.View.OnClickL
import android.widget.B
import android.widget.EditT
import android.widget.ImageV
import android.widget.T
public class MainActivity extends Activity implements OnClickListener {
private ImageV
private EditT
private Button btn,
private String codeS
private CodeUtils codeU
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
private void initView() {
image = (ImageView) findViewById(R.id.image);
et = (EditText) findViewById(R.id.et);
btn = (Button) findViewById(R.id.btn);
submit = (Button) findViewById(R.id.btn_submit);
btn.setOnClickListener(this);
submit.setOnClickListener(this);
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn:
codeUtils = CodeUtils.getInstance();
Bitmap bitmap = codeUtils.createBitmap();
image.setImageBitmap(bitmap);
case R.id.btn_submit:
codeStr = et.getText().toString().trim();
Log.e(&codeStr&, codeStr);
if (null == codeStr || TextUtils.isEmpty(codeStr)) {
Toast.makeText(this, &请输入验证码&, 0).show();
String code = codeUtils.getCode();
Log.e(&code&, code);
if (code.equalsIgnoreCase(codeStr)) {
Toast.makeText(this, &验证码正确&, 0).show();
Toast.makeText(this, &验证码错误&, 0).show();
最后附上CodeUtils代码:
package com.example.
import android.graphics.B
import android.graphics.Bitmap.C
import android.graphics.C
import android.graphics.C
import android.graphics.P
import java.util.R
* Created by yao
* 用于图片验证码的工具类
public class CodeUtils {
private static final char[] CHARS = {
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
'n', 'o', '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', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
private static CodeUtils mCodeU
private int mPaddingLeft, mPaddingT
private StringBuilder mBuilder = new StringBuilder();
private Random mRandom = new Random();
//Default Settings
private static final int DEFAULT_CODE_LENGTH = 6;//验证码的长度
private static final int DEFAULT_FONT_SIZE = 60;//字体大小
private static final int DEFAULT_LINE_NUMBER = 3;//多少条干扰线
private static final int BASE_PADDING_LEFT = 20; //左边距
private static final int RANGE_PADDING_LEFT = 30;//左边距范围值
private static final int BASE_PADDING_TOP = 70;//上边距
private static final int RANGE_PADDING_TOP = 15;//上边距范围值
private static final int DEFAULT_WIDTH = 300;//默认宽度.图片的总宽
private static final int DEFAULT_HEIGHT = 100;//默认高度.图片的总高
private static final int DEFAULT_COLOR = 0xDF;//默认背景颜色值
public static CodeUtils getInstance() {
if(mCodeUtils == null) {
mCodeUtils = new CodeUtils();
return mCodeU
//生成验证码图片
public Bitmap createBitmap() {
mPaddingLeft = 0; //每次生成验证码图片时初始化
mPaddingTop = 0;
Bitmap bitmap = Bitmap.createBitmap(DEFAULT_WIDTH, DEFAULT_HEIGHT, Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
code = createCode();
canvas.drawColor(Color.rgb(DEFAULT_COLOR, DEFAULT_COLOR, DEFAULT_COLOR));
Paint paint = new Paint();
paint.setTextSize(DEFAULT_FONT_SIZE);
for (int i = 0; i & code.length(); i++) {
randomTextStyle(paint);
randomPadding();
canvas.drawText(code.charAt(i) + && , mPaddingLeft, mPaddingTop, paint);
for (int i = 0; i & DEFAULT_LINE_NUMBER; i++) {
drawLine(canvas, paint);
canvas.save(Canvas.ALL_SAVE_FLAG);//保存
canvas.restore();
* 得到图片中的验证码字符串
public String getCode() {
//生成验证码
public String createCode() {
mBuilder.delete(0, mBuilder.length()); //使用之前首先清空内容
for (int i = 0; i & DEFAULT_CODE_LENGTH; i++) {
mBuilder.append(CHARS[mRandom.nextInt(CHARS.length)]);
return mBuilder.toString();
//生成干扰线
private void drawLine(Canvas canvas, Paint paint) {
int color = randomColor();
int startX = mRandom.nextInt(DEFAULT_WIDTH);
int startY = mRandom.nextInt(DEFAULT_HEIGHT);
int stopX = mRandom.nextInt(DEFAULT_WIDTH);
int stopY = mRandom.nextInt(DEFAULT_HEIGHT);
paint.setStrokeWidth(1);
paint.setColor(color);
canvas.drawLine(startX, startY, stopX, stopY, paint);
//随机颜色
private int randomColor() {
mBuilder.delete(0, mBuilder.length()); //使用之前首先清空内容
String haxS
for (int i = 0; i & 3; i++) {
haxString = Integer.toHexString(mRandom.nextInt(0xFF));
if (haxString.length() == 1) {
haxString = &0& + haxS
mBuilder.append(haxString);
return Color.parseColor(&#& + mBuilder.toString());
//随机文本样式
private void randomTextStyle(Paint paint) {
int color = randomColor();
paint.setColor(color);
paint.setFakeBoldText(mRandom.nextBoolean());
//true为粗体,false为非粗体
float skewX = mRandom.nextInt(11) / 10;
skewX = mRandom.nextBoolean() ? skewX : -skewX;
paint.setTextSkewX(skewX); //float类型参数,负数表示右斜,整数左斜
paint.setUnderlineText(true); //true为下划线,false为非下划线
paint.setStrikeThruText(true); //true为删除线,false为非删除线
//随机间距
private void randomPadding() {
mPaddingLeft += BASE_PADDING_LEFT + mRandom.nextInt(RANGE_PADDING_LEFT);
mPaddingTop = BASE_PADDING_TOP + mRandom.nextInt(RANGE_PADDING_TOP);
其中,在Default Settings中可以设置验证码图形的大小,验证码的长度,内边距,随机距离等可以根据需要进行调整。
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!贴吧里发表帖子要填验证码,图片里是文字怎么填上_百度知道
贴吧里发表帖子要填验证码,图片里是文字怎么填上
1、点击文字就可以2、贴吧填验证码在出现验证码方框时同时方框下面也会有9个在格子里的文字3、点击格子里和验证码一样的文字,但是注意文字字形字体是不一样的
采纳率:91%
你好,很高兴为你解答问题!在一个贴吧发言,三级以下的会员需要验证码,三级以上的会员就不需要验证码了。贴吧最下方有发言栏,文字可以直接打上,或者复制粘贴,图片可以点击图片发送。如果这个答案能够帮到你,请及时采纳噢,谢谢!
本回答被提问者和网友采纳
一种是点击你看到字的那个图片,一种就是打字输入
为您推荐:
其他类似问题
贴吧的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。学籍/学历在线验证报告_中国高等教育学生信息网(学信网)
学籍/学历在线验证报告
教育部指定的学历查询唯一网站、教育部高校招生阳光工程指定网站、全国硕士研究生招生报名和调剂指定网站
& 学籍/学历在线验证报告
关于免费申请学籍、学历电子验证报告的温馨提示
为贯彻落实国务院常务会议精神,方便群众办事,减轻群众负担,自日起,学信网将对《教育部学籍在线验证报告》及《教育部学历证书电子注册备案表》提供免费申请服务。
学籍/学历在线验证报告查询
请输入报告中的在线验证码:
提供的验证:
1. 《教育部学历证书电子注册备案表》(含中文版和英文版)
2. 《教育部学籍在线验证报告》(含中文版和英文版)微信申请建行信用卡填写资料有个图形验证码是什么_百度知道
微信申请建行信用卡填写资料有个图形验证码是什么
我有更好的答案
建行微信办卡,图形验证码是随机的,一般是字母加数字的组合,需要你自己仔细看下。
采纳率:95%
来自团队:
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。为什么很多情况下用户注册时要填验证码?有用吗_百度知道
为什么很多情况下用户注册时要填验证码?有用吗
我有更好的答案
  有用。  验证码的作用是防止恶意破解密码、刷票、论坛灌水、刷页。  有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登录尝试,实际上使用验证码是现在很多网站通行的方式(比如招商银行的网上个人银行,百度社区),我们利用比较简易的方式实现了这个功能。虽然登录麻烦一点,但是对网友的密码安全来说这个功能还是很有必要,也很重要。但我们还是 提醒大家要保护好自己的密码 ,尽量使用混杂了数字、字母、符号在内的6位以上密码,不要使用诸如1234之类的简单密码或者与用户名相同、类似的密码 ,免得你的账号被人盗用给自己带来不必要的麻烦。  验证码通常使用一些线条和一些不规则的字符组成,主要作用是为了防止一些黑客把密码数据化盗取。
采纳率:95%
来自团队:
怎么没人回答呢,这个问题不难啊,我来说说吧:不要忘了给分哦~~
验证码的作用:有效防止这种问题对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试,实际上是用验证码是现在很多网站通行的方式(比如招商银行的网上个人银行,腾讯的QQ社区),我们利用比较简易的方式实现了这个功能。虽然登陆麻烦一点,但是对社区还来说这个功能还是很有必要,也很重要。但我们还是提醒大家主要保护自己的密码,尽量使用混杂了数字、字母、符号在内的6位以上密码,不要使用诸如1234之类的简单密码或者与用户名相同、类似的密码。 不要因为只是来iclub问问问题,就随意设置密码,保护你自己的密码也是保护你自己,免得你的账号给人盗用给自己带来不必要的麻烦。 ~ (1).验证码一般是防止批量注册的,人眼看起来都费劲,何况是机器。二像百度贴吧未登录发贴要输入验证码大概是防止大规模匿名回帖的发生目前,不少网站为了防止用户利用机器人自动注册、登录、灌水,都采用了验证码技术。所谓验证码,就是将一串随机产生的数字或符号,生成一幅图片, 图片里加上一些干扰象素(防止OCR),由用户肉眼识别其中的验证码信息,输入表单提交网站验证,验证成功后才能使用某项功能。 (2).一般注册用户ID的地方以及各大论坛都要要输入验证码 (3).常见的验证码 1,四位数字,随机的一数字字符串,最原始的验证码,验证作用几乎为零。2,CSDN网站用户登录用的是GIF格式,目前常用的随机数字图片验证码。图片上的字符比较中规中矩,验证作用比上一个好。没有基本图形图像学知识的人,不可破!可惜读取它的程序,在CSDN使用它的第一天,好像就在论坛里发布了,真是可怜! 3,QQ网站用户登录用的是PNG格式,图片用的随机数字+随机大写英文字母,整个构图有点张扬,每刷新一次,每个字符还会变位置呢!有时候出来的图片,人眼都识别不了,厉害啊…4,MS的hotmail申请时候的是BMP格式, 随机数字+随机大写英文字母+随机干扰像素+随机位置。 5,Google的Gmail注册时候的是JPG格式,随机英文字母+随机颜色+随机位置+随机长度。6,其他各大论坛的是XBM格式,内容随机。 (4)意义:不少网站为了防止用户利用机器人自动注册、登录、灌水,都采用了验证码技术。所谓验证码,就是将一串随机产生的数字或符号,生成一幅图片,图片里加上一些干扰象素(防止OCR),由用户肉眼识别其中的验证码信息,输入表单提交网站验证,验证成功后才能使用某项功能。
本回答被提问者采纳
  填验证码是为了让真正的注册用户得到更好的服务。要求填写验证码是必须的有用的。如果不按提示填写验证码,则注册无法通过。  要求注册用户填写验证码可以:  a从一定程度上杜绝某些恶意注册、娱乐注册。以保证让注册渠道真正为真正的注册用户所用。  b杜绝一些误操作,保护注册资源不被误打误撞注册用户无利占用,造成资源浪费。  c保证注册渠道的畅通,规范。  
有,防止被骗
其他1条回答
为您推荐:
其他类似问题
您可能关注的内容
验证码的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 图形验证码总显示错误 的文章

 

随机推荐