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));

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Alipay PHP ...

JWT ist ein offener Standard, der auf JSON basiert und zur sicheren Übertragung von Informationen zwischen Parteien verwendet wird, hauptsächlich für die Identitätsauthentifizierung und den Informationsaustausch. 1. JWT besteht aus drei Teilen: Header, Nutzlast und Signatur. 2. Das Arbeitsprinzip von JWT enthält drei Schritte: Generierung von JWT, Überprüfung von JWT und Parsingnayload. 3. Bei Verwendung von JWT zur Authentifizierung in PHP kann JWT generiert und überprüft werden, und die Funktionen und Berechtigungsinformationen der Benutzer können in die erweiterte Verwendung aufgenommen werden. 4. Häufige Fehler sind Signaturüberprüfungsfehler, Token -Ablauf und übergroße Nutzlast. Zu Debugging -Fähigkeiten gehört die Verwendung von Debugging -Tools und Protokollierung. 5. Leistungsoptimierung und Best Practices umfassen die Verwendung geeigneter Signaturalgorithmen, das Einstellen von Gültigkeitsperioden angemessen.

Die Hijacking der Sitzung kann in den folgenden Schritten erreicht werden: 1. Erhalten Sie die Sitzungs -ID, 2. Verwenden Sie die Sitzungs -ID, 3. Halten Sie die Sitzung aktiv. Zu den Methoden zur Verhinderung der Sitzung der Sitzung in PHP gehören: 1. Verwenden Sie die Funktion Session_regenerate_id (), um die Sitzungs -ID zu regenerieren. 2. Store -Sitzungsdaten über die Datenbank, 3. Stellen Sie sicher, dass alle Sitzungsdaten über HTTPS übertragen werden.

Die Anwendung des soliden Prinzips in der PHP -Entwicklung umfasst: 1. Prinzip der Einzelverantwortung (SRP): Jede Klasse ist nur für eine Funktion verantwortlich. 2. Open and Close Principle (OCP): Änderungen werden eher durch Erweiterung als durch Modifikation erreicht. 3.. Lischs Substitutionsprinzip (LSP): Unterklassen können Basisklassen ersetzen, ohne die Programmgenauigkeit zu beeinträchtigen. 4. Schnittstellen-Isolationsprinzip (ISP): Verwenden Sie feinkörnige Schnittstellen, um Abhängigkeiten und nicht verwendete Methoden zu vermeiden. 5. Abhängigkeitsinversionsprinzip (DIP): Hoch- und niedrige Module beruhen auf der Abstraktion und werden durch Abhängigkeitsinjektion implementiert.

Wie debugge ich den CLI -Modus in PhpStorm? Bei der Entwicklung mit PHPSTORM müssen wir manchmal den PHP im CLI -Modus (COMS -Zeilenschnittstellen) debuggen ...

So setzen Sie die Berechtigungen von Unixsocket automatisch nach dem Neustart des Systems. Jedes Mal, wenn das System neu startet, müssen wir den folgenden Befehl ausführen, um die Berechtigungen von Unixsocket: sudo ...

Statische Bindung (statisch: :) implementiert die späte statische Bindung (LSB) in PHP, sodass das Aufrufen von Klassen in statischen Kontexten anstatt Klassen zu definieren. 1) Der Analyseprozess wird zur Laufzeit durchgeführt.

Senden von JSON -Daten mithilfe der Curl -Bibliothek von PHP in der PHP -Entwicklung müssen häufig mit externen APIs interagieren. Eine der gängigen Möglichkeiten besteht darin, die Curl Library zu verwenden, um Post � ...
