验证码校验:String.equalsIgnoreCase()
适用于验证码校验(不区分大小写)
public class TestString {public static void main(String[] args) {testEquals("asd", "asd");testEquals("asD", "Asd");}/*** @see java.lang.String#equalsIgnoreCase* usage: checking vertification code*/private static void testEquals(String a, String b) {System.out.println("\"" + a + "\".equals(\"" + b + "\") = " + a.equals(b));System.out.println("\"" + a + "\".equalsIgnoreCase(\"" + b + "\") = " + a.equalsIgnoreCase(b));}
}
class TestString {companion object {@JvmStaticfun main(args: Array<String>) {testEquals("asd", "asd")testEquals("asD", "Asd")}private fun testEquals(a: String, b: String) {println("\"$a\".equals(\"$b\") = " + (a == b))println("\"$a\".equalsIgnoreCase(\"$b\") = " + a.equals(b, ignoreCase = true))}}
}
运行结果
"asd".equals("asd") = true
"asd".equalsIgnoreCase("asd") = true
"asD".equals("Asd") = false
"asD".equalsIgnoreCase("Asd") = true
源码
public boolean equalsIgnoreCase(String anotherString) {return (this == anotherString) ? true: (anotherString != null)&& (anotherString.value.length == value.length)&& regionMatches(true, 0, anotherString, 0, value.length);}
1、优先判断内存地址值是否一致:this == anotherString
2、不为null且长度一致的情况下: regionMatches(true, 0, anotherString, 0, value.length)
public boolean regionMatches(boolean ignoreCase, int toffset,String other, int ooffset, int len) {char ta[] = value;int to = toffset;char pa[] = other.value;int po = ooffset;// Note: toffset, ooffset, or len might be near -1>>>1.//1、判断是否数组越界if ((ooffset < 0) || (toffset < 0)|| (toffset > (long)value.length - len)|| (ooffset > (long)other.value.length - len)) {return false;}//2、循环遍历char是否一致while (len-- > 0) {char c1 = ta[to++];char c2 = pa[po++];if (c1 == c2) {continue;}if (ignoreCase) {//是否忽略大小写,true 则同义转换为大写或同义转换为小写进行校验// If characters don't match but case may be ignored,// try converting both characters to uppercase.// If the results match, then the comparison scan should// continue.char u1 = Character.toUpperCase(c1);char u2 = Character.toUpperCase(c2);if (u1 == u2) {continue;}// Unfortunately, conversion to uppercase does not work properly// for the Georgian alphabet, which has strange rules about case// conversion. So we need to make one last check before// exiting.if (Character.toLowerCase(u1) == Character.toLowerCase(u2)) {continue;}}return false;}return true;}
小写字母转换大写字母
public static char toUpperCase(char ch) {return (char)toUpperCase((int)ch);}
public static int toUpperCase(int codePoint) {return CharacterData.of(codePoint).toUpperCase(codePoint);}
** testEquals(“asD”, “Asd”);
char ‘a’ = 97 ,char ‘A’=65,ch >>>8 == 0 为 true**
static final CharacterData of(int ch) {if (ch >>> 8 == 0) { // fast-pathreturn CharacterDataLatin1.instance;} else {switch(ch >>> 16) { //plane 00-16case(0):return CharacterData00.instance;case(1):return CharacterData01.instance;case(2):return CharacterData02.instance;case(14):return CharacterData0E.instance;case(15): // Private Usecase(16): // Private Usereturn CharacterDataPrivateUse.instance;default:return CharacterDataUndefined.instance;}}}
CharacterDataLatin1.instance
小写字母转大写字母
int toUpperCase(int ch) {int mapChar = ch;int val = getProperties(ch);if ((val & 0x00010000) != 0) {if ((val & 0x07FC0000) != 0x07FC0000) {int offset = val << 5 >> (5+18);mapChar = ch - offset;} else if (ch == 0x00B5) {mapChar = 0x039C;}}return mapChar;}
大写字母转小写字母
int toLowerCase(int ch) {int mapChar = ch;int val = getProperties(ch);if (((val & 0x00020000) != 0) && ((val & 0x07FC0000) != 0x07FC0000)) { int offset = val << 5 >> (5+18);mapChar = ch + offset;}return mapChar;}
int getProperties(int ch) {char offset = (char)ch;int props = A[offset];return props;}
static {{ // THIS CODE WAS AUTOMATICALLY CREATED BY GenerateCharacter:char[] data = A_DATA.toCharArray();assert (data.length == (256 * 2));int i = 0, j = 0;while (i < (256 * 2)) {int entry = data[i++] << 16;A[j++] = entry | data[i++];}}} static final int A[] = new int[256];static final String A_DATA ="\u4800\u100F\u4800\u100F\u4800\u100F\u4800\u100F\u4800\u100F\u4800\u100F\u4800"+"\u100F\u4800\u100F\u4800\u100F\u5800\u400F\u5000\u400F\u5800\u400F\u6000\u400F"+"\u5000\u400F\u4800\u100F\u4800\u100F\u4800\u100F\u4800\u100F\u4800\u100F\u4800"+"\u100F\u4800\u100F\u4800\u100F\u4800\u100F\u4800\u100F\u4800\u100F\u4800\u100F"+"\u4800\u100F\u4800\u100F\u5000\u400F\u5000\u400F\u5000\u400F\u5800\u400F\u6000"+"\u400C\u6800\030\u6800\030\u2800\030\u2800\u601A\u2800\030\u6800\030\u6800"+"\030\uE800\025\uE800\026\u6800\030\u2000\031\u3800\030\u2000\024\u3800\030"+"\u3800\030\u1800\u3609\u1800\u3609\u1800\u3609\u1800\u3609\u1800\u3609\u1800"+"\u3609\u1800\u3609\u1800\u3609\u1800\u3609\u1800\u3609\u3800\030\u6800\030"+"\uE800\031\u6800\031\uE800\031\u6800\030\u6800\030\202\u7FE1\202\u7FE1\202"+"\u7FE1\202\u7FE1\202\u7FE1\202\u7FE1\202\u7FE1\202\u7FE1\202\u7FE1\202\u7FE1"+"\202\u7FE1\202\u7FE1\202\u7FE1\202\u7FE1\202\u7FE1\202\u7FE1\202\u7FE1\202"+"\u7FE1\202\u7FE1\202\u7FE1\202\u7FE1\202\u7FE1\202\u7FE1\202\u7FE1\202\u7FE1"+"\202\u7FE1\uE800\025\u6800\030\uE800\026\u6800\033\u6800\u5017\u6800\033\201"+"\u7FE2\201\u7FE2\201\u7FE2\201\u7FE2\201\u7FE2\201\u7FE2\201\u7FE2\201\u7FE2"+"\201\u7FE2\201\u7FE2\201\u7FE2\201\u7FE2\201\u7FE2\201\u7FE2\201\u7FE2\201"+"\u7FE2\201\u7FE2\201\u7FE2\201\u7FE2\201\u7FE2\201\u7FE2\201\u7FE2\201\u7FE2"+"\201\u7FE2\201\u7FE2\201\u7FE2\uE800\025\u6800\031\uE800\026\u6800\031\u4800"+"\u100F\u4800\u100F\u4800\u100F\u4800\u100F\u4800\u100F\u4800\u100F\u5000\u100F"+"\u4800\u100F\u4800\u100F\u4800\u100F\u4800\u100F\u4800\u100F\u4800\u100F\u4800"+"\u100F\u4800\u100F\u4800\u100F\u4800\u100F\u4800\u100F\u4800\u100F\u4800\u100F"+"\u4800\u100F\u4800\u100F\u4800\u100F\u4800\u100F\u4800\u100F\u4800\u100F\u4800"+"\u100F\u4800\u100F\u4800\u100F\u4800\u100F\u4800\u100F\u4800\u100F\u4800\u100F"+"\u3800\014\u6800\030\u2800\u601A\u2800\u601A\u2800\u601A\u2800\u601A\u6800"+"\034\u6800\030\u6800\033\u6800\034\000\u7005\uE800\035\u6800\031\u4800\u1010"+"\u6800\034\u6800\033\u2800\034\u2800\031\u1800\u060B\u1800\u060B\u6800\033"+"\u07FD\u7002\u6800\030\u6800\030\u6800\033\u1800\u050B\000\u7005\uE800\036"+"\u6800\u080B\u6800\u080B\u6800\u080B\u6800\030\202\u7001\202\u7001\202\u7001"+"\202\u7001\202\u7001\202\u7001\202\u7001\202\u7001\202\u7001\202\u7001\202"+"\u7001\202\u7001\202\u7001\202\u7001\202\u7001\202\u7001\202\u7001\202\u7001"+"\202\u7001\202\u7001\202\u7001\202\u7001\202\u7001\u6800\031\202\u7001\202"+"\u7001\202\u7001\202\u7001\202\u7001\202\u7001\202\u7001\u07FD\u7002\201\u7002"+"\201\u7002\201\u7002\201\u7002\201\u7002\201\u7002\201\u7002\201\u7002\201"+"\u7002\201\u7002\201\u7002\201\u7002\201\u7002\201\u7002\201\u7002\201\u7002"+"\201\u7002\201\u7002\201\u7002\201\u7002\201\u7002\201\u7002\201\u7002\u6800"+"\031\201\u7002\201\u7002\201\u7002\201\u7002\201\u7002\201\u7002\201\u7002"+"\u061D\u7002";
验证码校验:String.equalsIgnoreCase()相关推荐
- AJAX应用【股票案例、验证码校验】
一.股票案例 我们要做的是股票的案例,它能够无刷新地更新股票的数据.当鼠标移动到具体的股票中,它会显示具体的信息. 我们首先来看一下要做出来的效果: 1.1服务器端分析 首先,从效果图我们可以看见很多 ...
- Java用户注册手机短信验证码校验功能实现
验证用户提交的手机短信验证码,如果验证码错误就跳回到当前页面.在短信验证码未填写或未正确填写时,就关闭底下注册按钮的功能,只有短信验证码通过校验后才打开注册按钮的功能.第二种方式是所有输入项全部填写完 ...
- JavaWeb简单的单点登录、验证码校验功能实现
前言 最近项目刚刚告一段落,后期有时间会慢慢分解整理出来给大家分享.本文主要提供思路和核心代码,建立在有一定后台基础读者上.(相信没有基础的同学只要认真细读也是可以理解的) 技术原理 1.单点登录(S ...
- springboot集成shiro实现验证码校验
github:https://github.com/peterowang/shiro/ 这里实现验证码校验的思路是自己添加一个Filter继承FormAuthenticationFilter,Form ...
- python版 —— 验证码校验 打码兔平台的使用介绍
python版 -- 验证码校验 打码兔平台的使用介绍 1. 背景 验证码(CAPTCHA)的全称是全自动区分计算机和人类的图灵测试(Completely Automated Public Turin ...
- JSP页面实现验证码校验
文章目录 验证码校验分析 生成验证码 测试验证码 校验验证码 测试验证码校验 添加验证码刷新 在网页页面的使用中为防止"非人类"的大量操作和防止一些的信息冗余,增加验证码校验是许多 ...
- 26:第三章:开发通行证服务:9:【注册/登录】接口:验证码校验OK后,先根据手机号去查查该用户是否已存在,如果用户不存在就创建这个用户;(tkmybatis查询构建查询条件,雪花算法,枚举类等等)
说明: (1)本篇博客内容:继续开发[注册/登录]接口: ● 在[25:第三章:开发通行证服务:8:[注册/登录]接口:接收并校验"手机号和验证码"参数:]中,[注册/登录]接口, ...
- Java中string.equalsIgnoreCase(0)与0.equalsIgnoreCase(string)的区别:
string.equalsIgnoreCase("0"):如果string为null,会抛出java.lang.NullPointerException异常. "0&qu ...
- 注册验证码校验-立即校验
注册验证码校验 1. 校验方式 输入后直接校验有好几种方式,之前一直再用的是onblur事件,当失去焦点是验证,但是注册码校验通常是最后一个表单输入,用户输入完直接点击提交,就会执行onblu ...
最新文章
- 每次都要清理cache?强制不让浏览器缓存!
- 如何启用nodejs request模块的调试模式
- 对A1A2A10B1B2N12排序
- 大约HR升级版的设计为组汇总
- APP的六种loading加载样式,全在这
- 第十四章_超参数调整
- PXE+kickstart 无人值守安装CentOS 6
- 读Zepto源码之Data模块
- 深度学习:智能时代的核心驱动力量
- jszip打包下载文件
- 线性回归分析步骤总结
- 用Python绘制一个简单的奥运五环
- Sphinx入门——快速生成Python文档
- wifidog 整体分析
- 蓝桥杯 算法训练 Beaver's Calculator
- 电影《美丽心灵》中纳什的经典演讲(双语)
- window突然没声音.无法启动window audio.无法播放测试音调
- 打游戏哪种蓝牙耳机比较好?适合玩游戏的无线蓝牙耳机
- 怎样才能设计一个“易用性”好的网站?
- NUC977 烧录裸机程序到DDR
热门文章
- c语言 dct变换,C语言实现DCT变换编码
- 5.1.9 数组的定义和for语句的使用- 常用语法【uni-app教程uniapp教程(黄菊华-跨平台开发系列教程)】
- linux系统开机grub命令修复方法,解析Linux系统下GRUB故障修复
- 知识服务是知识付费的价值回归
- Android布局include的用法
- 计算机一级office选择题必背知识点,全国计算机等级考试MSOffice选择题必考.docx...
- 当贝os系统和华为鸿蒙系统,吐槽!华为荣耀智慧屏和投影仪对比怎么样?谁是电视未来...
- Java反射技术详解
- vue cli创建vue3.0项目步骤
- vscode中安装了matplotlib,pandas,numpy等包,但还是报错,怎么解决?