[JavaCore] 微信手机浏览器版本判断
公司要做微支付,微信浏览器版本要大于5
package com.garinzhang.web.weixin; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.math.NumberUtils; /** *类说明 *@author Garin Zhang */ public class WchatUtil { public static final String WEI_XIN_BROWSER = "MicroMessenger/"; public static final int WEI_XIN_LEGAL_VERSION = 5; /** * 正则使用不熟练,只能自己苦逼解析 * @param userAgent * @return */ public static boolean isLegalVersion(String userAgent) { // 判断是否为微信,并对支付渠道做相应处理 // "Mozilla/5.0(iphone;CPU iphone OS 5_1_1 like Mac OS X) AppleWebKit/534.46(KHTML,like Geocko) Mobile/9B206 MicroMessenger/5.0" // String userAgent = request.getHeader("user-agent"); boolean isLegalVersion = false; if(StringUtils.isNotBlank(userAgent)) { // 判断是否为微信 int position = userAgent.indexOf(WEI_XIN_BROWSER); userAgent.matches(WEI_XIN_BROWSER); if(position != -1) { String versionStr = userAgent.substring(position + WEI_XIN_BROWSER.length()); String[] splitVersion = versionStr.split("\\."); // 程序解析 if(splitVersion != null && splitVersion.length > 0) { String mainVersion = splitVersion[0]; // 判断主版本号大于5 if(NumberUtils.isNumber(mainVersion)) { int i = Integer.valueOf(mainVersion); if(i >= WEI_XIN_LEGAL_VERSION) { isLegalVersion = true; } } } } } System.out.println("Agent: " + userAgent + ", isLegalVersion: " + isLegalVersion); return isLegalVersion; } public static void main(String[] args) { // 本来准备直接按照如下比较,结果发现当主版本号超过10的时候,就不灵了 System.out.println("5.0".compareTo("5.0.2")); // =0 System.out.println("5.0".compareTo("10.1")); // >0 System.out.println("5.0".compareTo("0")); // >0 System.out.println("5.0".compareTo("4.0.2")); // >0 System.out.println("5.0".compareTo("5.1.2")); // <0 // 写个方法单独解析 isLegalVersion("Mobile/9B206 MicroMessenger/5.0"); // true isLegalVersion("Mobile/9B206 MicroMessenger/5.0.2");// true isLegalVersion("Mobile/9B206 MicroMessenger/4.0"); // false isLegalVersion("Mobile/9B206 MicroMessenger/5.1"); // true isLegalVersion("Mobile/9B206 MicroMessenger/10.1"); // true isLegalVersion("Mobile/9B206 MicroMessenger/0.1"); // false } }
正则版本,待正则熟练之后再补充
路慢慢其休远羲,吾将上下而求所
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何在 .NET 中 使用 ANTLR4
· 后端思维之高并发处理方案
· 理解Rust引用及其生命周期标识(下)
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 想让你多爱自己一些的开源计时器
· Cursor预测程序员行业倒计时:CTO应做好50%裁员计划
· 大模型 Token 究竟是啥:图解大模型Token
· 用99元买的服务器搭一套CI/CD系统
· 如何在 .NET 中 使用 ANTLR4