如何在PHP中从RFID卡号字符串提取指定位置的6位数字并展示
PHP实现RFID字符串提取与校验方案
1. 提取指定位置的6位校验码
PHP内置的substr函数可以直接完成子串截取,注意该函数的索引从0开始计数,你需要的第14-19位(1基准)对应起始偏移为13,截取长度为6:
// 从RFID读取到的原始字符串 $rfid_raw = 'ccffff10320d011899540002692a000002692ab7'; // 截取逻辑:起始偏移13,取6位 $check_code = substr($rfid_raw, 13, 6); // 测试输出,示例场景下会得到189954 echo $check_code;
注意:如果实际提取结果和预期不符,微调
substr的第一个偏移参数即可,不同计数基准(1起始/0起始)会产生1位的偏差。
2. 格式合法性校验
建议加两层前置校验,避免后续逻辑出错:
// 校验原始RFID长度是否符合要求 if (strlen($rfid_raw) < 19) { die("RFID字符串格式非法"); } // 校验提取的6位是否为纯数字(根据你的业务需求可选) if (!preg_match('/^\d{6}$/', $check_code)) { die("提取的校验码格式非法"); }
3. 数据库匹配逻辑
推荐用PDO参数绑定的方式查询,避免SQL注入风险:
// 初始化数据库连接,替换为你自己的配置 $pdo = new PDO('mysql:host=127.0.0.1;dbname=你的库名;charset=utf8mb4', '数据库用户名', '数据库密码'); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // 参数绑定查询,避免注入 $stmt = $pdo->prepare("SELECT count(*) FROM 你的用户表 WHERE 校验码字段 = ? LIMIT 1"); $stmt->execute([$check_code]); $is_match = $stmt->fetchColumn() > 0; if ($is_match) { // 匹配成功,执行对应服务逻辑 echo "校验通过,已为你开通对应服务"; } else { // 匹配失败,返回错误提示 echo "校验失败,无访问权限"; }
内容的提问来源于stack exchange,提问作者Esteban Gonzalez
相关产品推荐
相关产品推荐

