訂單號(hào)就是您在購(gòu)物網(wǎng)站購(gòu)物后獲得的訂單號(hào),記錄的是購(gòu)物訂單信息。在您需要與購(gòu)物網(wǎng)站進(jìn)行訂單查詢等操作時(shí),需要給購(gòu)物網(wǎng)站提供商家訂單號(hào)。【來(lái)自百度百科】
軟件開(kāi)發(fā)中我們經(jīng)常會(huì)遇到生成訂單號(hào)的業(yè)務(wù)邏輯來(lái)記錄用戶下單、物流、發(fā)票、支付、結(jié)算等信息。生成訂單號(hào)的方式多種多樣。大部分會(huì)參考業(yè)務(wù)需求來(lái)設(shè)計(jì)生成方式,但訂單號(hào)的生成規(guī)則大同小異相差不大。下面給大家總結(jié)介紹幾種訂單號(hào)的生成規(guī)則以供參考。
1、隨機(jī)數(shù)方法。
function gen_order_rand() {
$strTime = str_pad(str_replace(".", "", microtime(true)), 14, "0", STR_PAD_RIGHT);
$strRand = strval(mt_rand(10000, 99999));
return $strTime . $strRand;
}
var_dump(gen_order_rand());
運(yùn)行結(jié)果:
string(19) "1648171258258353703"
2、隨機(jī)數(shù)+uid方法
function gen_order_uid_rand($uid) {
$strUid = str_pad(substr(strval($uid), -5), 5, "0", STR_PAD_RIGHT);
$strTime = date('ymdHis');
$strRand = strval(mt_rand(1000, 9999));
return $strUid . $strTime . $strRand;
}
$intUid = 1234567890;
var_dump(gen_order_uid_rand($intUid));
運(yùn)行結(jié)果:
string(21) "678902203250120587473"
3、uniqid+crc64方法
function crc64Table()
{
? ? $crc64tab = [];
? ? // ECMA polynomial
? ? $poly64rev = (0xC96C5795 << 32) | 0xD7870F42;
? ? // ISO polynomial
? ? // $poly64rev = (0xD8 << 56);
? ? for ($i = 0; $i < 256; $i++)
? ? {
? ? ? ? for ($part = $i, $bit = 0; $bit < 8; $bit++) {
? ? ? ? ? ? if ($part & 1) {
? ? ? ? ? ? ? ? $part = (($part >> 1) & ~(0x8 << 60)) ^ $poly64rev;
? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? $part = ($part >> 1) & ~(0x8 << 60);
? ? ? ? ? ? }
? ? ? ? }
?? ? ? $crc64tab[$i] = $part;
? ? }
? ? return $crc64tab;
}
/**
* @param string $string
* @param string $format
* @return mixed
*
* Formats:
*? crc64('php'); // afe4e823e7cef190
*? crc64('php', '0x%x'); // 0xafe4e823e7cef190
*? crc64('php', '0x%X'); // 0xAFE4E823E7CEF190
*? crc64('php', '%d'); // -5772233581471534704 signed int
*? crc64('php', '%u'); // 12674510492238016912 unsigned int
*/
function crc64($string, $format = '%x')
{
? ? static $crc64tab;
? ? if ($crc64tab === null) {
? ? ? ? $crc64tab = crc64Table();
? ? }
? ? $crc = 0;
? ? for ($i = 0; $i < strlen($string); $i++) {
? ? ? ? $crc = $crc64tab[($crc ^ ord($string[$i])) & 0xff] ^ (($crc >> 8) & ~(0xff << 56));
? ? }
? ? return sprintf($format, $crc);
}
//uniqid方法
function gen_order_uuid() {
$strUuid = crc64(uniqid(), '%u');
return $strUuid;
}
var_dump(gen_order_uuid());
運(yùn)行結(jié)果:
string(19) "2559207576599622011"
4、隨機(jī)字符串+crc64方法
function crc64Table()
{
? ? $crc64tab = [];
? ? // ECMA polynomial
? ? $poly64rev = (0xC96C5795 << 32) | 0xD7870F42;
? ? // ISO polynomial
? ? // $poly64rev = (0xD8 << 56);
? ? for ($i = 0; $i < 256; $i++)
? ? {
? ? ? ? for ($part = $i, $bit = 0; $bit < 8; $bit++) {
? ? ? ? ? ? if ($part & 1) {
? ? ? ? ? ? ? ? $part = (($part >> 1) & ~(0x8 << 60)) ^ $poly64rev;
? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? $part = ($part >> 1) & ~(0x8 << 60);
? ? ? ? ? ? }
? ? ? ? }
?? ? ? $crc64tab[$i] = $part;
? ? }
? ? return $crc64tab;
}
/**
* @param string $string
* @param string $format
* @return mixed
*
* Formats:
*? crc64('php'); // afe4e823e7cef190
*? crc64('php', '0x%x'); // 0xafe4e823e7cef190
*? crc64('php', '0x%X'); // 0xAFE4E823E7CEF190
*? crc64('php', '%d'); // -5772233581471534704 signed int
*? crc64('php', '%u'); // 12674510492238016912 unsigned int
*/
function crc64($string, $format = '%x')
{
? ? static $crc64tab;
? ? if ($crc64tab === null) {
? ? ? ? $crc64tab = crc64Table();
? ? }
? ? $crc = 0;
? ? for ($i = 0; $i < strlen($string); $i++) {
? ? ? ? $crc = $crc64tab[($crc ^ ord($string[$i])) & 0xff] ^ (($crc >> 8) & ~(0xff << 56));
? ? }
? ? return sprintf($format, $crc);
}
//隨機(jī)字符串+crc64方法
function gen_order_randchar() {
$strChar = "QWERTYUIOPASDFGHJKLZXCVBNM1234567890qwertyuiopasdfghjklzxcvbnm";
$strRandChar = substr(str_shuffle($strChar), mt_rand(0, strlen($strChar) - 11), 16);
$strRandChar = crc64($strRandChar, '%u');
return $strRandChar;
}
var_dump(gen_order_randchar());
運(yùn)行結(jié)果:
string(20) "15531636943001169826"
5、Twitter SnowFlake算法方法
composer require youthage/snowflake
require_once 'vendor/autoload.php';
use Ysnowflake\Snowflake;
function gen_order_snowflake() {
$objSnowflake = new Snowflake();
return $objSnowflake->nextId();
}
var_dump(gen_order_snowflake());
運(yùn)行結(jié)果:
int(434087018926964736)
感謝大家評(píng)論、點(diǎn)贊、分享
聲明:本文由網(wǎng)站用戶香香發(fā)表,超夢(mèng)電商平臺(tái)僅提供信息存儲(chǔ)服務(wù),版權(quán)歸原作者所有。若發(fā)現(xiàn)本站文章存在版權(quán)問(wèn)題,如發(fā)現(xiàn)文章、圖片等侵權(quán)行為,請(qǐng)聯(lián)系我們刪除。