کلاس UUID برای PHP

۵ سال پیش(به روز شده در ۵ سال پیش) پی اچ پی(PHP)(کلاس) ۰

UUID یا Universally Unique Identifier شناسه استاندارد استفاده شده در ساخت نرم افزار هاست که توسط Open Source Foundation استاندارد سازی شده است و بعنوان بخشی از Distributed Computing Environmen به حساب می آید. هر کسی می تواند از UUID استفاده کند و اطمینان داشته باشد که کس دیگری از UUID او استفاده نمی کند. منبع

<?php
/**
 * UUID class
 *
 * The following class generates VALID RFC 4122 COMPLIANT
 * Universally Unique IDentifiers (UUID) version 3, 4 and 5.
 *
 * UUIDs generated validates using OSSP UUID Tool, and output
 * for named-based UUIDs are exactly the same. This is a pure
 * PHP implementation.
 *
 * @author Andrew Moore
 * @link http://www.php.net/manual/en/function.uniqid.php#94959
 */
class UUID
{
	/**
	 * Generate v3 UUID
	 *
	 * Version 3 UUIDs are named based. They require a namespace (another 
	 * valid UUID) and a value (the name). Given the same namespace and 
	 * name, the output is always the same.
	 * 
	 * @param	uuid	$namespace
	 * @param	string	$name
	 */
	public static function v3($namespace, $name)
	{
		if(!self::is_valid($namespace)) return false;
 
		// Get hexadecimal components of namespace
		$nhex = str_replace(array('-','{','}'), '', $namespace);
 
		// Binary Value
		$nstr = '';
 
		// Convert Namespace UUID to bits
		for($i = 0; $i < strlen($nhex); $i+=2) 
		{
			$nstr .= chr(hexdec($nhex[$i].$nhex[$i+1]));
		}
 
		// Calculate hash value
		$hash = md5($nstr . $name);
 
		return sprintf('%08s-%04s-%04x-%04x-%12s',
 
		// 32 bits for "time_low"
		substr($hash, 0, 8),
 
		// 16 bits for "time_mid"
		substr($hash, 8, 4),
 
		// 16 bits for "time_hi_and_version",
		// four most significant bits holds version number 3
		(hexdec(substr($hash, 12, 4)) & 0x0fff) | 0x3000,
 
		// 16 bits, 8 bits for "clk_seq_hi_res",
		// 8 bits for "clk_seq_low",
		// two most significant bits holds zero and one for variant DCE1.1
		(hexdec(substr($hash, 16, 4)) & 0x3fff) | 0x8000,
 
		// 48 bits for "node"
		substr($hash, 20, 12)
		);
	}
 
	/**
	 * 
	 * Generate v4 UUID
	 * 
	 * Version 4 UUIDs are pseudo-random.
	 */
	public static function v4() 
	{
		return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
 
		// 32 bits for "time_low"
		mt_rand(0, 0xffff), mt_rand(0, 0xffff),
 
		// 16 bits for "time_mid"
		mt_rand(0, 0xffff),
 
		// 16 bits for "time_hi_and_version",
		// four most significant bits holds version number 4
		mt_rand(0, 0x0fff) | 0x4000,
 
		// 16 bits, 8 bits for "clk_seq_hi_res",
		// 8 bits for "clk_seq_low",
		// two most significant bits holds zero and one for variant DCE1.1
		mt_rand(0, 0x3fff) | 0x8000,
 
		// 48 bits for "node"
		mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
		);
	}
 
	/**
	 * Generate v5 UUID
	 * 
	 * Version 5 UUIDs are named based. They require a namespace (another 
	 * valid UUID) and a value (the name). Given the same namespace and 
	 * name, the output is always the same.
	 * 
	 * @param	uuid	$namespace
	 * @param	string	$name
	 */
	public static function v5($namespace, $name) 
	{
		if(!self::is_valid($namespace)) return false;
 
		// Get hexadecimal components of namespace
		$nhex = str_replace(array('-','{','}'), '', $namespace);
 
		// Binary Value
		$nstr = '';
 
		// Convert Namespace UUID to bits
		for($i = 0; $i < strlen($nhex); $i+=2) 
		{
			$nstr .= chr(hexdec($nhex[$i].$nhex[$i+1]));
		}
 
		// Calculate hash value
		$hash = sha1($nstr . $name);
 
		return sprintf('%08s-%04s-%04x-%04x-%12s',
 
		// 32 bits for "time_low"
		substr($hash, 0, 8),
 
		// 16 bits for "time_mid"
		substr($hash, 8, 4),
 
		// 16 bits for "time_hi_and_version",
		// four most significant bits holds version number 5
		(hexdec(substr($hash, 12, 4)) & 0x0fff) | 0x5000,
 
		// 16 bits, 8 bits for "clk_seq_hi_res",
		// 8 bits for "clk_seq_low",
		// two most significant bits holds zero and one for variant DCE1.1
		(hexdec(substr($hash, 16, 4)) & 0x3fff) | 0x8000,
 
		// 48 bits for "node"
		substr($hash, 20, 12)
		);
	}
 
	public static function is_valid($uuid) {
		return preg_match('/^\{?[0-9a-f]{8}\-?[0-9a-f]{4}\-?[0-9a-f]{4}\-?'.
                      '[0-9a-f]{4}\-?[0-9a-f]{12}\}?$/i', $uuid) === 1;
	}
}
?>
Example:
<?php
define('UUID_NAMESPACE', '1368509f-2a13-4334-05ae-e00f2a55bbaf');
echo UUID::v5(UUID_NAMESPACE, md5(uniqid(rand(), true))); //Out = xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
?>

برچسبها

UUID

صفحات پیشنهادی

کلاس تجزیه گر فایل لاگ سرور آپاچی...

کلاس زیر , فایل لاگ وب سرور آپاچی را تجزیه نموده و نتایج اطلاعات تجزیه شده هر بازدیدکننده را نمایش می دهد. این اطلاعات شامل آی پی , تاریخ ثبت , آدرس رفرنس یا مرجع , وضعیت و ... است. لاگ سرور آپاچی محل...

کلاس رمزنگاری و رمزگشایی Crypter...

با استفاده از کلاس Crypter براحتی رشته های متنی را بر پایه الگوریتم Base64 رمزگذاری کرده و سپس در مواقع لزوم رمزگشایی کنید......

کلاس Browser.php , کلاسی قدرتمند در جهت شناسایی مرورگر کاربر...

کلاس Browser توسط Chris Schuld نوشته شده و تقریبا تمامی مرورگرها را شناسایی می نماید. از خصوصیات بارز این کلاس امکان شناسایی پلتفورم یا سیستم عامل , ربات یا مرورگر بودن , نسخه مرورگر , تشخیص...

پروتکل SOAP در php(نحوه ارسال و درخواست در این پروتکل)...

"با استفاده از پروتکل دسترسی آسان به اشیاء یا سُوپ (Simple Object Access Protocol - SOAP) می‌توان به ارسال و تبادل پیامهایی از جنس اکس‌ام‌ال بر روی شبکه‌های رایانه‌ای مبادرت کرد". ما قصد توضیح در مورد...

نظر

نظری ثبت نشده است.