支付宝吱口令的截取

最近支付宝扫码领红包,复制邀请码领红包的活动开展得如火如荼,期间层出不迭一些套路,将自己的支付宝邀请码混杂在一段有趣的文字中,让用户打开支付宝,以此获得奖金,比如这样式的:

受朋友之托征婚 女,唐紫,26岁,未婚,上海本地人,身高1米65,体重48公斤,复旦大学毕业。漂亮大方,爱好旅游,健身美体,游泳。目前在上海张江一家中国500强公司任职,工作稳定,年薪50万。上海有2套房,1套在汤臣豪园,一辆特斯拉代步,车牌号OOmTmz89aA,一辆smart代步,车牌k2798,人务实、不拜金,一直没有合适的男朋友, 她本人要求一点也不高且她家人现在非常着急,发动亲戚朋友想请大家给介绍一个。【复制本文到支付宝APP打开可见详情照片!】

将这段话复制在剪切板,再打开支付宝就能领取红包,那么问题来了,支付宝是怎么办到的呢?在如此大一段话中找到你的邀请码,此篇文章将浅显的实现一下类似功能。

分三步

  • 拿到剪切板的内容
  • 从剪切板中截取出邀请码
  • 将邀请码传递给后台

在此我们只需要实现前两步

剪切板与我们的应用处于两个进程,进程间通信暂且不表,幸好Android给我们提供了剪切板的系统服务

ClipboardManager manager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
if (!manager.hasPrimaryClip()) { //剪切板内无内容
       return;
   }
ClipData clipData = manager.getPrimaryClip();
String text = clipData.getItemAt(0).getText().toString();

第一步就完成了,现在实现第二步,截取出邀请码。
通过我的观察,发现邀请码的组成都是10位的数字和大小写字母,知道这一点就很好实现了,贴出代码

private String findSpecialString(String text, int findStringLength) {
        int findLength = 0; //查找到的长度
        char[] chars = text.toCharArray();
        for (int i = 0, length = chars.length; i < length; i++) {
            char c = chars[i];
            if (Character.isDigit(c) || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) { 
                //是否是字母或数字
                findLength++;
            } else {
                findLength = 0;
            }

            if (findStringLength == findLength) { //找到了
                int startIndex = i - findStringLength;
                StringBuilder builder = new StringBuilder();
                while (startIndex != i) {
                    builder.append(chars[++startIndex]);
                }
                return builder.toString();
            }
        }
        return null;
    }

可以看到我这里还加了个参数来避免了硬编码10位的字母或数字,改变这个参数值,可以实现查找任意位数的连续字母或数字

思路:
定义变量findLength作为目前查找到的连续字母或数字位数,在循环里,只要字符不是数字或字母就会重置这个变量,以此实现查找连续的数字或字母,当findLength等于10时,当前的i必为我需要的连续字符串的最后一位,只需向前倒推10位即可获得所需字符串的首位的前一位,然后再通过一个循环构造结果字符串即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章