整理一个简单的短链算法,整理到自己的代码库中:
<?php /** * 短链服务 * @author vb2005xu */ class Service_ShortUrlGenerator { private static $table = 'short_url'; private static $list = array(); function __construct(array $config) { if ( empty($config['db']) ) { throw BaseError::invalid_parameters_error('key "db" not set'); } $this->_db = $config['db']; } /** * 获取指定用户创建的短链集合 * * @param int $uid * @param int $skip * @param int $limit * * @return array */ function getAllByUid( $uid , $skip=0, $limit=10 ) { $rows = DataSource::instance($this->_db)->select(self::$table,array( 'uid' => $uid, ),'*',null,$skip,$limit); return $rows; } /** * 获取指定用户创建的短链总数 * * @param int $uid * * @return int */ function getCountByUid( $uid ) { return DataSource::instance($this->_db)->count(self::$table,array( 'uid' => $uid, )); } /** * 通过短链标识 获取对应的 url * * @param string $identify * @param int $uid * * @return string */ function decode( $identify , $uid ) { $uid = intval($uid); if ( !empty($identify) && $uid > 0 ) { $identify = trim($identify); if ( strlen( $identify ) == 6 ) { if ( !isset( self::$list[$id] ) ) { $row = DataSource::instance($this->_db)->find_one(self::$table,array( 'uid' => $uid, 'identify' => $identify, ),'link'); self::$list[$identify] = empty($row['link']) ? NULL : $row['link']; } return self::$list[$identify]; } } return null; } /** * 返回6位的短链标识 * * @param string $url * * @return string */ function encode( $url , $uid ) { $uid = intval($uid); if ( !empty($url) && $uid > 0 ) { $url = trim($url); $identify = self::generate( $url ); # 放在此处做下缓存 self::$list[$identify] = $url; # 因为 uid + identify 做了唯一键索引,故此处不进行数据存在校验 DataSource::instance($this->_db)->insert(self::$table,array( 'uid' => $uid, 'identify' => $identify, 'link' => $link, 'create_at' => APP_START_TIMESTAMP, )); return $identify; } return null; } /** * 返回6位的短链标识 * * @param string $url * * @return string */ static function identify( $url ) { if ( empty($url) ) return FALSE; return self::code62( sprintf("%u", crc32($url)) ); } private static function code62($x) { $show = ''; while($x > 0) { $s = $x % 62; if ($s > 35) { $s = chr($s+61); } elseif ($s > 9 && $s <=35) { $s = chr($s + 55); } $show .= $s; $x = floor($x/62); } return $show; } }
相关推荐
准备工作:创建一个Computer类 要求成员变量包括如下: (1)编号(即计算机的唯一标识) (2)CPU型号, (3)主板型号, (4)硬盘大小, (5)内存大小, (6)显卡型号, (7)价格, 题目: (1)要求使用ArrayList存储...
具有属性:姓名、年龄、性别、身高;...创建主类,在主类中创建一个对象:名叫“张三”,性别“男”,年龄18岁,身高1.80; 让该对象调用成员方法:说出“你好!”,计算23+45的值,并将名字改为“李四”。
创建一个PEOPLE类,创建一个People类,定义成员变量如身份证号、姓名、性别、年龄;定义成员方法“获取身份证号”、“获取姓名”、“获取年龄”等,再创建People类的对象。
创建该服务仅用到一个 C++ 类,这个类提供服务与操作系统之间一个简单的接口。使用这个类实现自己的服务非常简单,只要改写少数几个基类中的虚拟函数即可。在本文有三个源代码参考例子: • NTService 是一个简单的...
先创建一个Point类,然后定义Trianglele类。在Trianglele类中定义三个Point的实体来表示一个三角形的三个点,再定义构造方法对这三个点进行初始化,然后定义两个方法求三角形的周长、面积。定义一个测试类,在main()...
创建该服务仅用到一个 C++ 类,这个类提供服务与操作系统之间一个简单的接口。使用这个类实现自己的服务非常简单,只要改写少数几个基类中的虚拟函数即可。在本文有三个源代码参考例子: NTService 是一个简单的 ...
题目描述:一个简单的学生课程系统,可以创建学生,课程,成绩,以及计算最高对分。 功能要求: (1) 创建一个学生类,包含学号,姓名,性别。 (2) 创建一个课程成绩类,包含课程名称和成绩。 (3) 创建一个学生课程...
创建一个桌子Table类,该类中有桌子名称,重量,桌面宽度,长度及桌子高度属性。其中有:构造函数初始化所有数据成员;Area() :计算桌面的面积; Display(): 在屏幕上输出所有数据成员的值;ChangeWeight(int ):改变...
java创建一个简单的Maven项目java创建一个简单的Maven项目java创建一个简单的Maven项目java创建一个简单的Maven项目java创建一个简单的Maven项目java创建一个简单的Maven项目java创建一个简单的Maven项目java创建一...
使用 C# 创建一个 FTP 服务器,供大家一起共同分享学习。
《用 C++ 创建简单的 Win32 服务程序》一文的例子代码。描述如何用 Visual C++ 创建 Windows NT 服务程序。创建该服务仅用到一个 C++ 类,这个类提供服务与操作系统之间一个简单的接口。使用这个类实现自己的服务...
java 使用 Swagger 创建一个Spring Boot 的 Web 服务java 使用 Swagger 创建一个Spring Boot 的 Web 服务java 使用 Swagger 创建一个Spring Boot 的 Web 服务java 使用 Swagger 创建一个Spring Boot 的 Web 服务java...
Web服务英文名为WebService,简单的说就是一种应用程序,使用标准的互联网协议,在网上提供一个函数接口,用户可以在任何地方调用Web服务。本文档就是结合实际的例子来探讨Web服务的创建、测试和使用。详细内容包括...
构建一个简单的HTTP服务器的C#程序实例。实现响应GET、POST请求。在服务端创建一个tcp通信来负责...每一次监听程序都会创建一个新的TcpClien,HttpServer类又会创建一个新的HttpProcessor,然后启动一个线程来操作。
该类描述的是关于汽车的车牌行驶速度以及行驶状态
一个用于创建服务的类, 只需在派生类中实现Run和Stop函数即可。
16.编写一个类A,该类创建的对象可以调用方法f 输出英文字母表,然后再编写一个该类的子类B,要求 子类B 必须继承A 类的方法f(不允许重写),子类创建的对象不仅可以调用方法f 输出英文字母表,而 且调用子类新增的...
在这个示例中,我们首先导入了Mojo框架,并创建了一个继承自 `Mojolicious` 的类 `MyApp`。然后,在 `startup` 方法中定义了一个简单的路由,当收到根路径的 GET 请求时,返回 "Hello World!"。最后,创建了一个应用...
1、假设你要反射一个 DLL 中的类,并且没有引用它(即未知的类型): Assembly assembly = Assembly.LoadFile(程序集路径,不能是相对路径); // 加载程序集(EXE 或 DLL) dynamic obj = assembly....
设计一个Person类,有Person类派生一个Student类和一个Teacher类,Student类包括姓名,编号,和成绩。Teacher类包括姓名,编号,职务和部门。又要用的来下载啊,希望对你有所帮助。