当前位置: 首页 > news >正文

wordpress如何在首页不显示某类分类目录下的文章?seo网站推广教程

wordpress如何在首页不显示某类分类目录下的文章?,seo网站推广教程,dw网页制作教程完整版,南戴河区网站建设哪家好前言 最近在项目中遇到一个问题,当前用户分享一个邀请码给好友,好友根据邀请码注册成为新用户之后,则成为当前用户的下级,特定条件下,可以得到下级用户的一系列返利。这里要实现的就是根据当前用户的id,生成…

前言

最近在项目中遇到一个问题,当前用户分享一个邀请码给好友,好友根据邀请码注册成为新用户之后,则成为当前用户的下级,特定条件下,可以得到下级用户的一系列返利。这里要实现的就是根据当前用户的id,生成一个加密串,并且可以反向解密。经过不断的测试调整,终于得到了最后的结果。如:

id = 12 code = 85U43DM

初次实现

先上代码,如下:

/*** 加密解密用户邀请码,* @param unknown $string* @param string $action  encode|decode* @return string*/
function endecodeUserId($string, $action = 'encode') {$startLen = 13;$endLen = 8;$coderes = '';#TOD 暂设定uid字符长度最大到9if ($action=='encode') {$uidlen = strlen($string);$salt = 'yourself_code';$codestr = $string.$salt;$encodestr = hash('md4', $codestr);$coderes = $uidlen.substr($encodestr, 5,$startLen-$uidlen).$string.substr($encodestr, -12,$endLen);$coderes = strtoupper($coderes);}elseif($action=='decode'){$strlen = strlen($string);$uidlen = $string[0];$coderes = substr($string, $startLen-$uidlen+1,$uidlen);}return  $coderes;
}

思路介绍:

设定一个盐值,$salt,和id拼接后组成一个新的字符串,该盐值可用于后期对邀请码进行安全校验。对该字符串进行md4加密(考虑到相比md5,md4速度更快,并且安全性也并不弱),得到$encodestr,对该字符串进行拆分,分为前后两部分,第一部分$startLen,13个字符串;第二部分$endLen,8个字符串。将$string,这里指传入的id,和$uidlen,混入前一部分字符串。因这里目前仅支持id最大长度为9,因此$uidlen长度为1,这样最后我们便得到了一个长度为22的字符串。

加密的过程中,我们实际上是把id的数值和id的长度,混入到了加密串中,加密的时候我们根据存入的这些信息找到对应的位置,即可得到id。

这里,我们对安全性并没有要求很高,为了使程序运行速度更快,因此在解密的时候并没有验证。

测试,对id加密:

echo endecodeUserId(12);

输出结果:

23471DC2352712F34D6780

测试,对邀请码解密

 echo endecodeUserId('23471DC2352712F34D6780','decode');

输出结果:

12

得到的结果看上去并没有问题,但是实际测试中发现这样一个问题,对于普通用户可能会存在这种情况,好友发到他手机微信上一个邀请码,然后他想要用电脑进行注册,但他并不知道该怎么样把邀请码从手机传到电脑上或者嫌麻烦,这时候他就要在电脑开始手动输入邀请码了,天哪,22位啊,还是大写字母加数字混合,估计他要放弃注册了。

因此,我们进行了调整,改成7位的邀请码。

再次探索

这里是在写文章之前对方法进行了封装,还是直接先上代码


<?phpclass convert
{/*** 初始数字,自定义*/const INIT_NUM = 123456789;/*** @var 进制的基本字符串*/private $baseChar;/*** @var 进制类型*/private $type;/*** @var array 各进制字符串列表*/private static $convertList = array('32' => '0123456789ABCDEFGHJKMNPQRSTVWXYZ',//不含ILOU);public function __construct($type='32'){$this->type = $type;$this->baseChar = self::$convertList[$type];}/*** 公用方法,数字进行进制转换* @param $num* @return string*/private function _idToString($num){$str = '';while ($num!=0){$tmp = $num % $this->type;$str .= $this->baseChar[$tmp];$num = intval($num/$this->type);}return $str;}/*** @desc  im:十机制数转换成三十二进制数* @param (string)$char 三十二进制数* return 返回:十进制数*/public function idToString($id){//10位内id 返回7位字母数字//数组 增加备用数值$id += self::INIT_NUM;//左补0 补齐10位$str = str_pad($id,10,'0',STR_PAD_LEFT);//按位 拆分 4 6位(32进制 4 6位划分)$num1 = intval($str[0].$str[2].$str[6].$str[9]);$num2 = intval($str[1].$str[3].$str[4].$str[5].$str[7].$str[8]);$str1 = $str2 = '';$str1 = $this->_idToString($num1);$str1 = strrev($str1);$str2 = $this->_idToString($num2);$str2 = strrev($str2);//4 补足 3 4位 U Lreturn str_pad($str1,3,'U',STR_PAD_RIGHT).str_pad($str2,4,'L',STR_PAD_RIGHT);}/*** @desc  im:三十二进制数转换成十机制数* @param (string)$char 三十二进制数* return 返回:十进制数*/public function stringToId($str){//1 清除 3 4 位补足位$str1 = trim(substr($str,0,3),'U');$str2 = trim(substr($str,3,4),'L');$num1 = $this->_stringToId($str1);$num2 = $this->_stringToId($str2);//补位拼接$str1 = str_pad($num1,4,'0',STR_PAD_LEFT);$str2 = str_pad($num2,6,'0',STR_PAD_LEFT);$id = ltrim($str1[0].$str2[0].$str1[1].$str2[1].$str2[2].$str2[3].$str1[2].$str2[4].$str2[5].$str1[3],'0');//减去 备用数值$id -= self::INIT_NUM;return $id;}/*** 公用方法字符串转数字* @param $str* @return float|int|string*/private function _stringToId($str){//转换为数组$charArr = array_flip(str_split($this->baseChar));$num = 0;for ($i=0;$i<=strlen($str)-1;$i++){$linshi = substr($str,$i,1);if(!isset($charArr[$linshi])){return '';}$num += $charArr[$linshi]*pow($this->type,strlen($str)-$i-1);}return $num;}
}

思路介绍

在一位工作多年的大神的指导下,采用了这种方法。将id转化为固定长度的32进制字符串,并加上自己的算法。为什么这里采用32进制,而不是其他进制呢?32进制可以包含足够多的英文字符,生成的加密串看起来会更规范,另一方面,排除一些不容易识别的英文字符(这里排除ILOU),因此采用了32进制,而并没有采用36进制。

加密过程,方法idToString(),因考虑到刚开始id比较小的时候,转为32进制会出现比较多的0,看起来很不规范,因此设定一个初始值INIT_NUM,这个可以自定义。根据传过来的id,加上初始值后得到一个长度为10位的数值,将这个数值间隔位拆开分为长度为4位的$num1和长度为6位的$num2,两个数值分别转换为32进制,$num1转化后得到长度为3的字符串,不足的用U补足,$num2得到长度为4的字符串,不足的用L来补足。

解密则是逆操作,反向操作即可。

测试:生成

$obj = new convert(32);
$res1 = $obj->idToString(12);

结果:

85U43DM

解密:

$obj = new convert(32);
$res1 = $obj->stringToId('85U43DM');

结果:

12

总结

当然,即使最后的这个方法中也存在有不足的地方,比如在对加密数值拆分为2个num值的时候,用的方法就很不灵活,一旦修改解密的地方也要跟着变动。这里只是分享一个思路,欢迎大家批评指正。

http://www.lbrq.cn/news/2734345.html

相关文章:

  • 广州做网站哪里有百度搜索结果
  • 什么大的网站是帝国cms做的优化方案官方网站
  • 做网站怎样写标题网络游戏推广怎么做
  • 什么网站可以做教师资格证的题中国去中心化搜索引擎
  • 任丘 做网站网络营销服务公司有哪些
  • 做企业网站域名七牛云
  • 广州互帮物流哪家公司做的网站seo服务价格表
  • 重庆企业建站模板贵州seo推广
  • 哈尔滨模板做网站培训网址大全
  • 做网站推广的流程真正的免费建站在这里
  • 上海专业高端网站建设服务器外贸推广具体是做什么
  • php网站培训机构企业做网站google下载官方版
  • 网站运营解决方案制作网站要花多少钱
  • 有哪些做兼职的网站武汉网站运营专业乐云seo
  • 微站和pc网站3000块钱在朋友圈投放广告
  • 如何建设一个苹果网站网站建立
  • 外贸电子网站企业网站设计制作
  • 做淘宝的网线可以浏览台湾网站吗seo排名优化软件
  • 网站建好后广告是不是需要搜索引擎优化方法总结
  • 电脑公司网站设计软文撰写
  • 济南市建设信用网站武汉seo管理
  • 怎样建设自己的美甲网站做推广
  • 免费的网站怎么做谷歌关键词
  • 建设官网的网站首页北京网站优化
  • 响应式网站建设公司‘南宁关键词优化软件
  • 网站域名space关键词优化排名网站
  • 深圳布吉网站建设云搜索app官网
  • 网站高端建设电商怎么做新手入门
  • 椒江做网站文登seo排名
  • 全屏网站宽度苏州网站建设哪家靠谱
  • 三、memblock 内存分配器
  • ESP32 C3 开发板使用教程 01-测试显示屏
  • 实时计算 记录
  • 斯诺登:数据迷雾中的哨兵与棱镜裂痕的永恒回响
  • HDFS数据倾斜导致MapReduce作业失败的排查与优化实践
  • docker入门