📜  把长号码缩短到九巴? - PHP (1)

📅  最后修改于: 2023-12-03 14:54:36.714000             🧑  作者: Mango

把长号码缩短到九巴? - PHP

在电话号码、社交媒体账号等场景中,我们经常需要把长的字符串缩短成较短的形式。在本篇文章中,我们将探讨如何使用 PHP 编写一个把长号码缩短到九巴的程序。

思路

把长号码缩短到九巴的方法很多,这里我们采用的是哈希函数的方法。具体思路是:

  1. 把长号码当作输入,通过哈希函数生成一个较短的字符串。
  2. 把生成的短字符串保存在数据库中,同时把长号码和短字符串做映射关系存储在哈希表中。
  3. 当需要还原长号码时,从哈希表中查询对应的短字符串,进而获得原本的长号码。

在这个思路中,哈希函数的选取是至关重要的,它需要满足以下条件:

  1. 生成的字符串尽可能短,以在缩短长度上发挥作用。
  2. 输入相同,输出一致,满足一一映射的要求。

在 PHP 中,我们可以使用 md5() 函数生成哈希值,它生成的字符串长度为 32 个字符,可以较好地满足上述要求。

代码实现

我们先来看一下数据库和哈希表的设计。

数据库设计

我们定义一个号码转化表,表结构如下:

CREATE TABLE `number_trans` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `long_number` varchar(20) NOT NULL COMMENT '长号码',
  `short_number` varchar(40) NOT NULL COMMENT '短号码',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='号码转化表';
代码实现

1. 缩短长号码

function shorten_number($long_number) {
    // 检查号码是否存在于数据库中,如果已经存在直接返回短号码
    $sql = "SELECT short_number FROM number_trans WHERE long_number=:long_number";
    $stmt = $pdo->prepare($sql);
    $stmt->execute([':long_number'=>$long_number]);
    $result = $stmt->fetch(PDO::FETCH_ASSOC);
    if (!empty($result)) {
        return $result['short_number'];
    }
    // 如果不存在于数据库中,生成一个短号码
    $short_number = md5($long_number);
    // 把长号码和短号码存入数据库
    $sql = "INSERT INTO number_trans (long_number,short_number) VALUES (:long_number,:short_number)";
    $stmt = $pdo->prepare($sql);
    $stmt->execute([':long_number'=>$long_number,':short_number'=>$short_number]);
    // 在哈希表中保存映射关系
    $GLOBALS['cache'][$short_number] = $long_number;
    // 返回短号码
    return $short_number;
}

2. 还原长号码

function restore_number($short_number) {
    // 先检查是否存在于哈希表中,如果存在直接返回原号码
    if (isset($GLOBALS['cache'][$short_number])) {
        return $GLOBALS['cache'][$short_number];
    }
    // 如果不存在,从数据库中查询并返回原号码
    $sql = "SELECT long_number FROM number_trans WHERE short_number=:short_number";
    $stmt = $pdo->prepare($sql);
    $stmt->execute([':short_number'=>$short_number]);
    $result = $stmt->fetch(PDO::FETCH_ASSOC);
    if (!empty($result)) {
        return $result['long_number'];
    }
    return null;
}
总结

本篇文章介绍了如何使用 PHP 编写一个把长号码缩短到九巴的程序。通过哈希函数的方法,可以生成一个短字符串并把它存储到数据库中,同时也把长号码和短字符串的映射关系存储在哈希表中,从而实现长号码的缩短和还原。具体实现可以参考上述代码片段。