`
OrangeHolic
  • 浏览: 260727 次
  • 来自: 北京
社区版块
存档分类
最新评论

PHP简单的手机验证码验证过程

    博客分类:
  • PHP
 
阅读更多
做过一个需求:广告主后台发起调查活动,普通用户参加此调查后跳转值某个网址领取1Q点(1角钱);上线一段时间以后,广告主反馈得到的很多手机号都是伪造的(我们开始只用正则匹配判断手机号正确与否),然后产品让我们加上手机短信验证,就变成了下面的样子.




刚开始的思路应该很正常的那种,用rand生成随机码,然后存在redis里边,设置expire为60秒;后来考虑考虑,用户为了1角钱不至于如此,需要验证码的时候也不会瞎填写,系统还限制某ID用户明天每天只能参加5次这种活动,也为了不浪费系统资源的原则,公司发的短信已经需要2分钱一条,决定不用redis,用下面的思路:

用用户帐号+活动ID+手机号进行处理生成一个固定的数字,然后驾驶时间戳进行干扰生成4位数的数字,干扰以后只保证4位数对应的二进制的1、5、6、7、8、9位不被干扰,这样对应会生出pow(2,6)个不一样的4位数字,随机发送给用户一个。

用户验证验证码时候也只验证验证码的1、5、6、7、8、9位是否正确,为用户帐号+活动ID+手机号进行处理生成,这样就不用存储验证码,达到验证手机号的号码。

具体的测试例子在下面,为啥说是测试例子呢,因为最后还没有用,我就去封闭开发其他项目去了,下面代码也是偶尔翻到,看代码竟然是我工作一周年的时候写的  ,测试的代码生成的验证码散列的不是很好,也没有时间进行改善,主要介绍一下上面的思路。

<?php
/**
 *
 * User: shikiliu
 * Date: 13-7-11
 */
class TelephoneCheck
{


    /**
     * 取得某个用户某次活动的手机验证码
     * @param $uin 用户ID 小于10000系统保留
     * @param $actId 活动ID  小于1000系统保留
     * @param $telephone 用户手机号
     * @return bool|int 4位数的验证码
     */
    public function getTelephoneCode($uin, $actId, $telephone)
    {

        if ($uin < 10000 || $actId < 1000 || empty($telephone)) {
            return false;
        }

        $time = time();

        $timeFeature = hexdec(substr(md5($time), 0, 3)) & 0x1F1;

        $telephoneFeature = hexdec(substr(md5($telephone), 8, 4));

        $actIdFeature = hexdec(substr(md5($actId), 16, 4));

        $uinFeature = hexdec(substr(md5($uin), 24, 4));

        $sumFeature = $telephoneFeature + $actIdFeature + $uinFeature;

        $sumFeature = $sumFeature % 10000;

        if ($sumFeature < 1000) {
            $sumFeature = 5145;
        }

        $result = $sumFeature | $timeFeature;

        return $result;
    }


    /**
     * 验证用户的手机验证码
     * @param $uin 用户ID 小于10000系统保留
     * @param $actId 活动ID  小于1000系统保留
     * @param $telephone 用户手机号
     * @param $code getTelephoneCode生成的验证码
     * @return bool 是否正确
     */
    public function  checkTelephoneCode($uin, $actId, $telephone, $code)
    {

        if ($uin < 10000 || $actId < 1000 || empty($telephone) || empty($code)) {
            return false;
        }

        $telephoneFeature = hexdec(substr(md5($telephone), 8, 4));

        $actIdFeature = hexdec(substr(md5($actId), 16, 4));

        $uinFeature = hexdec(substr(md5($uin), 24, 4));

        $sumFeature = $telephoneFeature + $actIdFeature + $uinFeature;

        $sumFeature = $sumFeature % 10000;

        if ($sumFeature < 1000) {
            $sumFeature = 5145;
        }

        $sumFeature = $sumFeature & 0xE0E;

        $code = $code & 0xE0E;

        if ($sumFeature == $code) {
            return true;
        }
        return false;
    }
}


$actId = 10001;
$telephone = 13797025562;
$uin = 514540767;


$telCode = new TelephoneCheck();


$code = $telCode->getTelephoneCode($uin, $actId, $telephone);

var_dump($code);

var_dump($telCode->checkTelephoneCode($uin, $actId, $telephone, $code));

var_dump($telCode->checkTelephoneCode($uin, $actId, $telephone, $code+10));

  • 大小: 7.4 KB
分享到:
评论

相关推荐

    php google 图象关联手机验证码

    本资源“php google 图象关联手机验证码”提供了一种结合PHP和Google的reCAPTCHA服务来实现手机验证的解决方案。reCAPTCHA是由Google提供的一个免费服务,它通过人工智能技术来区分人类和计算机,从而保护网站免受...

    java,C#,PHP等实现手机发送验证码Demo

    验证码是一种常见的身份验证机制,广泛应用于...通过理解以上步骤和编程实现,开发者可以为自己的应用程序添加可靠且安全的手机验证码功能。无论你是Java、C#还是PHP开发者,都能从这些Demo中找到实现思路和代码参考。

    destoon7.0注册添加短信验证码验证功能.zip

    首先,我们要理解的是短信验证码验证的基本原理。当用户在注册页面填写手机号码后,系统会向该号码发送一条包含随机数字验证码的短信。用户需要在指定时间内将接收到的验证码输入到注册页面进行验证。如果输入的...

    爱码验证码飞Q验证码手机验证码模块

    其API接口设计简洁,易于开发者集成,使得手机验证码的获取和验证过程变得更加流畅。 集成“爱码”和“飞Q”验证码模块后,开发者可以实现以下功能: 1. **快速集成**:通过提供的详细说明文档,开发者可以快速...

    获取手机短信验证码源码

    4. **验证码验证**:系统接收到用户输入的验证码后,与服务器保存的验证码进行对比,确认一致则验证成功。 5. **安全措施**:为了防止恶意攻击,系统通常会设置验证码的有效期和发送频率限制。 现在我们来探讨获取...

    小京东V7.9.9去除手机验证码插件

    其次,过于繁琐的验证码验证过程可能会降低用户体验,导致潜在客户的流失。 小京东V7.9.9去除手机验证码插件,意味着该平台采取了其他安全措施来平衡用户体验与安全性。这可能包括采用更先进的反机器人技术,如行为...

    PHP - cURL实现短信验证码注册登录完整示例:PHP - cURL.php和附件说明

    总的来说,这个示例提供了一个使用PHP和cURL实现短信验证码验证的完整流程,这对于构建安全的用户注册和登录系统至关重要。开发者可以通过学习这个示例来提升他们的技能,更好地理解和应用网络请求技术。

    discuzx2.5增加手机验证码注册

    手机验证码注册过程一般包括以下几个步骤: 1. 用户输入手机号码:在注册页面,用户需填写手机号码作为唯一标识。 2. 发送验证码:系统通过短信服务提供商发送一条包含验证码的短信到用户提供的手机号码。 3. ...

    php手机验证码

    用户注册网站时,通过输入手机号码,获取验证码注册网站或商城

    Desktop_php实现google验证码_

    总结来说,PHP实现Google验证码主要是利用TOTP算法和第三方库,为用户创建一个安全的两步验证过程。通过生成和验证动态密码,可以显著提高用户账户的安全性,防止未授权的访问。在开发过程中,需要确保代码的健壮性...

    PHP谷歌验证器生成秘钥和验证

    谷歌验证器是谷歌公司... 不少割韭菜的项目需要使用到谷歌验证器,这个方法可以生成一个验证码(可以把验证码生成一个二维码,这样谷歌验证器就可以扫码直接绑定了),内置一个校验验证码的功能,可以匹配验证的结果。

    动态滑动后端验证码实现

    - 为了保证用户体验,验证码的生成和验证过程需要快速响应。服务器端应优化图片处理算法,减少网络传输的数据量,前端则需要优化图片加载和滑动交互的流畅性。 9. **常见问题**: - 用户可能遇到网络延迟导致的...

    手机短信验证码php版源代码

    验证通是业内首家提供语音验证码的网站,提供详细的客户接口示例。 账号更安全如:游戏玩家绑定了手机或固话,只可用绑定过的号码向验证通获取随机密码,才可以登录游戏或转账等一系列的操作等 用户信息更真实:只有...

    阿里云PHP短信发送验证码

    阿里云PHP短信发送验证码服务是企业或开发者在网站或应用中实现用户身份验证的重要手段,它通过发送含有随机数字或字母的验证码到用户的手机上,确保用户为真实且具有相应权限。这一服务在注册、登录、找回密码、...

    【分享】PHP触发验证码短信接口DEMO

    - 接口通常包括发送验证码、验证验证码和查询验证码状态等功能。 4. **PHP接口DEMO的结构** - DEMO一般包含以下几个部分: - 设置短信服务商的API密钥和参数。 - 发送验证码:构建请求参数,调用API接口,发送...

    PHPRedis邮箱注册、手机号验证码套件

    在这个"PHPRedis邮箱注册、手机号验证码套件"中,我们将探讨如何利用PHP和Redis来实现高效、安全的用户注册过程,特别是通过邮箱验证和手机号验证码功能。 首先,我们来看标题中的"PHPRedis邮箱注册"部分。在用户...

    jquery全面验证带验证码的注册示例

    前端需要验证用户输入的验证码与服务端返回的一致。可以使用AJAX异步请求来完成这一过程。 6. **AJAX请求**:`$.ajax()`或`$.post()`方法用于向服务器发送异步请求,验证用户输入的数据。在提交表单前,先验证所有...

    短信验证码注册登录用php语言可PHP - cURL、HTTP_Request2、 pecl_http.php文件.zip

    本压缩包提供的"PHP - cURL.php"、"PHP - HTTP_Request2.php"和"PHP - pecl_http.php"文件分别展示了三种使用PHP实现短信验证码发送和验证的方法。以下将详细介绍这三种方法及其相关知识点。 1. **PHP - cURL** ...

    DEDE自定义表单加验证码功能+js必填项

    首先,我们需要在DEDE的后端代码中增加验证码的验证逻辑。具体步骤如下: **步骤1**:找到根目录下的`plus/diy.php`文件,在第61行附近添加如下代码: ```php if (!empty($dede_fields)) { $validate = empty($...

Global site tag (gtag.js) - Google Analytics