int转字符串实现方法

简介: int转字符串实现方法

抖音的分享链接一般为: https://v.douyin.com/JGoSFt2/

那么后面那串  JGoSFt2  是什么呢?

其实后面那串为分享id转字符串,原始数据可能为 :1091566355946 ,通过特定算法转换为了更短的字符串

实现代码为:

<?php
namespace EasySwoole\\Utility;
class IntStr
{
    public const intMax = 9223372036854775668;
    private const alphabet = \[
        'A', 'a', 'B', 'b', 'C', 'c', 'D', 'd', 'E', 'e',
        'F', 'f', 'G', 'g', 'H', 'h', 'I', 'i', 'J', 'j',
        'K', 'k', 'L', 'l', 'M', 'm', 'N', 'n', 'O', 'o',
        'P', 'p', 'Q', 'q', 'R', 'r', 'S', 's', 'T', 't',
        'U', 'u', 'V', 'v', 'W', 'w', 'X', 'x', 'Y', 'y',
        'Z', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'
    \];
    public static function toAlpha($number): string
    {
        if ($number < 0 && $number > self::intMax) {
            throw new \\InvalidArgumentException('number error');
        }
        $alpha = '';
        if ($number <= 61) {
            return self::alphabet\[$number\];
        } elseif ($number > 61) {
            $dividend = ($number + 1);
            while ($dividend > 0) {
                $modulo = ($dividend - 1) % 62;
                if ($modulo < 0) {
                    $modulo = 62 + $modulo;
                }
                $alpha = self::alphabet\[$modulo\] . $alpha;
                $dividend = bcdiv(($dividend - $modulo) , 62);
            }
        }
        return $alpha;
    }
    public static function toNum($string): int
    {
        $alpha\_flip = array\_flip(self::alphabet);
        $return_value = -1;
        $length = strlen($string);
        for ($i = 0; $i < $length; $i++) {
            $return_value +=
                ($alpha_flip\[$string\[$i\]\] + 1) * bcpow(62, ($length - $i - 1));
        }
        return $return_value;
    }
}

运行:

<?php
include "./vendor/autoload.php";
var_dump(\\EasySwoole\\Utility\\IntStr::toNum('JGoSFt2'));
var_dump(\\EasySwoole\\Utility\\IntStr::toAlpha(100000000000000));


image.png

目录
相关文章
|
7月前
|
SQL 流计算 OceanBase
OceanBase CDC从热OB库采集过来的Tinyint(1)类型会默认转换成Boolean,请教一下,如果想转换成int类型,有什方法么?
【2月更文挑战第25天】OceanBase CDC从热OB库采集过来的Tinyint(1)类型会默认转换成Boolean,请教一下,如果想转换成int类型,有什方法么?
182 3
go string to int 字符串与整数型的互换
go string to int 字符串与整数型的互换
68 0
|
2月前
|
机器学习/深度学习 算法
让星星⭐月亮告诉你,HashMap之tableSizeFor(int cap)方法原理详解(分2的n次幂和非2的n次幂两种情况讨论)
`HashMap` 的 `tableSizeFor(int cap)` 方法用于计算一个大于或等于给定容量 `cap` 的最小的 2 的幂次方值。该方法通过一系列的无符号右移和按位或运算,逐步将二进制数的高位全部置为 1,最后加 1 得到所需的 2 的幂次方值。具体步骤包括: 1. 将 `cap` 减 1,确保已经是 2 的幂次方的值直接返回。 2. 通过多次无符号右移和按位或运算,将最高位 1 后面的所有位都置为 1。 3. 最终加 1,确保返回值为 2 的幂次方。 该方法保证了 `HashMap` 的数组容量始终是 2 的幂次方,从而优化了哈希表的性能。
34 1
|
4月前
|
搜索推荐 算法 Java
现有一个接口DataOperation定义了排序方法sort(int[])和查找方法search(int[],int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法
该博客文章通过UML类图和Java源码示例,展示了如何使用适配器模式将QuickSort类和BinarySearch类的排序和查找功能适配到DataOperation接口中,实现算法的解耦和复用。
47 1
现有一个接口DataOperation定义了排序方法sort(int[])和查找方法search(int[],int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法
遍历字符串,String line = xxx for(int i = 0;i<line.length();i++){system.out.println(line.chartAt(i)); 单个
遍历字符串,String line = xxx for(int i = 0;i<line.length();i++){system.out.println(line.chartAt(i)); 单个
|
5月前
|
存储 Python
语音输入,python数据类型,type()用来查看数据类型,数据类型转换,int(x)转整数,float(x)转换为浮点数,str(x),将对象转为字符串,标识符,标识符不允许使用关键字,关键字参考
语音输入,python数据类型,type()用来查看数据类型,数据类型转换,int(x)转整数,float(x)转换为浮点数,str(x),将对象转为字符串,标识符,标识符不允许使用关键字,关键字参考
|
7月前
|
Java
Java中int[]与Integer[]相互转化的方法,java基础知识面试重点总结
Java中int[]与Integer[]相互转化的方法,java基础知识面试重点总结
|
7月前
int 和 String 互相转换的多种方法
int 和 String 互相转换的多种方法
43 1
|
7月前
|
Java
java 数组转字符串 和字符串转int
【4月更文挑战第11天】java 数组转字符串 和字符串转int
98 2
|
Java
【Java用法】Java中String类型和int类型互转的所有方法
【Java用法】Java中String类型和int类型互转的所有方法
141 0