适用于验证码校验(不区分大小写)

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()相关推荐

  1. AJAX应用【股票案例、验证码校验】

    一.股票案例 我们要做的是股票的案例,它能够无刷新地更新股票的数据.当鼠标移动到具体的股票中,它会显示具体的信息. 我们首先来看一下要做出来的效果: 1.1服务器端分析 首先,从效果图我们可以看见很多 ...

  2. Java用户注册手机短信验证码校验功能实现

    验证用户提交的手机短信验证码,如果验证码错误就跳回到当前页面.在短信验证码未填写或未正确填写时,就关闭底下注册按钮的功能,只有短信验证码通过校验后才打开注册按钮的功能.第二种方式是所有输入项全部填写完 ...

  3. JavaWeb简单的单点登录、验证码校验功能实现

    前言 最近项目刚刚告一段落,后期有时间会慢慢分解整理出来给大家分享.本文主要提供思路和核心代码,建立在有一定后台基础读者上.(相信没有基础的同学只要认真细读也是可以理解的) 技术原理 1.单点登录(S ...

  4. springboot集成shiro实现验证码校验

    github:https://github.com/peterowang/shiro/ 这里实现验证码校验的思路是自己添加一个Filter继承FormAuthenticationFilter,Form ...

  5. python版 —— 验证码校验 打码兔平台的使用介绍

    python版 -- 验证码校验 打码兔平台的使用介绍 1. 背景 验证码(CAPTCHA)的全称是全自动区分计算机和人类的图灵测试(Completely Automated Public Turin ...

  6. JSP页面实现验证码校验

    文章目录 验证码校验分析 生成验证码 测试验证码 校验验证码 测试验证码校验 添加验证码刷新 在网页页面的使用中为防止"非人类"的大量操作和防止一些的信息冗余,增加验证码校验是许多 ...

  7. 26:第三章:开发通行证服务:9:【注册/登录】接口:验证码校验OK后,先根据手机号去查查该用户是否已存在,如果用户不存在就创建这个用户;(tkmybatis查询构建查询条件,雪花算法,枚举类等等)

    说明: (1)本篇博客内容:继续开发[注册/登录]接口: ● 在[25:第三章:开发通行证服务:8:[注册/登录]接口:接收并校验"手机号和验证码"参数:]中,[注册/登录]接口, ...

  8. Java中string.equalsIgnoreCase(0)与0.equalsIgnoreCase(string)的区别:

    string.equalsIgnoreCase("0"):如果string为null,会抛出java.lang.NullPointerException异常. "0&qu ...

  9. 注册验证码校验-立即校验

    注册验证码校验 1.     校验方式 输入后直接校验有好几种方式,之前一直再用的是onblur事件,当失去焦点是验证,但是注册码校验通常是最后一个表单输入,用户输入完直接点击提交,就会执行onblu ...

最新文章

  1. 每次都要清理cache?强制不让浏览器缓存!
  2. 如何启用nodejs request模块的调试模式
  3. 对A1A2A10B1B2N12排序
  4. 大约HR升级版的设计为组汇总
  5. APP的六种loading加载样式,全在这
  6. 第十四章_超参数调整
  7. PXE+kickstart 无人值守安装CentOS 6
  8. 读Zepto源码之Data模块
  9. 深度学习:智能时代的核心驱动力量
  10. jszip打包下载文件
  11. 线性回归分析步骤总结
  12. 用Python绘制一个简单的奥运五环
  13. Sphinx入门——快速生成Python文档
  14. wifidog 整体分析
  15. 蓝桥杯 算法训练 Beaver's Calculator
  16. 电影《美丽心灵》中纳什的经典演讲(双语)
  17. window突然没声音.无法启动window audio.无法播放测试音调
  18. 打游戏哪种蓝牙耳机比较好?适合玩游戏的无线蓝牙耳机
  19. 怎样才能设计一个“易用性”好的网站?
  20. NUC977 烧录裸机程序到DDR

热门文章

  1. c语言 dct变换,C语言实现DCT变换编码
  2. 5.1.9 数组的定义和for语句的使用- 常用语法【uni-app教程uniapp教程(黄菊华-跨平台开发系列教程)】
  3. linux系统开机grub命令修复方法,解析Linux系统下GRUB故障修复
  4. 知识服务是知识付费的价值回归
  5. Android布局include的用法
  6. 计算机一级office选择题必背知识点,全国计算机等级考试MSOffice选择题必考.docx...
  7. 当贝os系统和华为鸿蒙系统,吐槽!华为荣耀智慧屏和投影仪对比怎么样?谁是电视未来...
  8. Java反射技术详解
  9. vue cli创建vue3.0项目步骤
  10. vscode中安装了matplotlib,pandas,numpy等包,但还是报错,怎么解决?