承接 ctfang/id-to-code 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

ctfang/id-to-code

Composer 安装命令:

composer require ctfang/id-to-code

包简介

id to code

README 文档

README

自增int类型的id可逆加密算法

例如mysql自增字段,如果直接在接口中暴露,会暴露出您的系统业务量,哪怕设置id从100000开始,也可以在下个月再看接口就直接知道你系统一个月的运营量

特别是订单号,用户id等直接显示,会直接透露你公司的真实运营信息

这时候可以使用 uuid 或者 时间+机器id+进程id+进程内自增+随机数 编码解决

但是这样处理的code实在太长,而且数据库处理速度没有自增id快,这时候可以使用加密算法,把id转成code给前端,前端传参时候再把code转id完美解决

使用场景

用户对外uid, 订单号

Install

  • composer command
composer require ctfang/id-to-code

使用

生成加密模板

<?php

use IdCode\CodeGen;
use IdCode\CodeService;

require_once __DIR__."/../src/CodeService.php";
require_once __DIR__."/../src/CodeGen.php";
// 最短长度
$minLen = 8;
// 数字长度位+纯数字模式
$mode   = CodeService::numMode;
// 字符长度位+纯数字模式
// $mode   = CodeService::chrModel;
// 无长度位+36进制| 不能设置最短位数,但是能在最短的位数表达更大的数量
// $mode   = CodeService::notMode;

if ( !file_exists('int.config.json') ){
    file_put_contents('int.config.json',(new CodeGen())->genKey($minLen,$mode));
}

业务使用

<?php

use IdCode\CodeService;

$code = new CodeService('int.config.json');

$ok = true;
// 加密解密一亿次
for ($int=0;$int<100000000;$int++){
    $base = $int;
    $str = $code->toString($int); 
    $newInt = $code->toInt($str);

    if ($base != $newInt){
        $ok = false;
        break;
    }
}
if ($ok){
    var_dump("加密 和 解密正常");
};
var_dump($code->toString(1));

每一个 int 都转化类似 71869931 的code

原理

根据加密模板,替换数字数据,因为只是替换动作,不需要哈希计算,所有速度很快

加密模板是反人类习惯生成的映射表,正常人类看数字是 123456789 有序理解,但是经过加密模板后,可能变成 589647123 无规律

普通id因为是自增的,很容易看出来,但是经过加密编码,1转2,2转5无规律转换,每个位数独立一个加密模板,转换时加个设定位数盐,就是每次都不一样,如果id数由 997 到 998 中间只有一个数字变更,但是在加密算法中 因为盐的不一样,会把前面 99 两个根本没有变动的数字也做了不同模板的替换,也可以得到全部位数都变动的数值

统计信息

  • 总下载量: 2.14k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 3
  • 点击次数: 0
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 3
  • Watchers: 1
  • Forks: 1
  • 开发语言: PHP

其他信息

  • 授权协议: Apache-2.0
  • 更新时间: 2019-09-21

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固