>  기사  >  백엔드 개발  >  PHP는 자동 증가된 ID를 기반으로 고유한 숫자 클래스를 생성합니다.

PHP는 자동 증가된 ID를 기반으로 고유한 숫자 클래스를 생성합니다.

黄舟
黄舟원래의
2017-02-17 09:46:231353검색


개발 과정에서 우리 데이터 테이블은 일반적으로 자체 증가하는 숫자를 id 기본 키로 사용하며 id는 숫자 유형이므로 이해하기 쉽지 않습니다. ID를 특정 형식에 따라 숫자로 변환한 후에는 숫자를 기반으로 콘텐츠가 무엇을 나타내는지 쉽게 알 수 있습니다.

예를 들어 주문 테이블 id=20160111197681234. 하지만 변환된 ID만으로는 이 ID가 주문 테이블의 ID인지 알 수 없습니다. O-20160111197681234번으로 주문 테이블의 기록임을 확인하고, ID를 기준으로 주문 테이블에서 검색하면 매우 어렵습니다.

숫자 생성 규칙

1. 고유
고유성을 보장하기 위해 자동 증가 ID를 사용하여 생성

2. 🎜 >문자에 해당하는 나머지 숫자를 사용하여 더 짧은 숫자를 만들 수 있습니다


알고리즘 원리

1. 사용자 정의 접두사를 추가하여

2. 형식은 접두사 + 문자 + 숫자로 구성됩니다. 숫자는 N자리만 가능합니다. 10자리 이상이면 나머지는 문자로 찾습니다. >id=1

Prefix = F

번호는 3자리입니다

, 생성된 번호는

F-A-001



The 코드는 다음과 같습니다:

IDCode.class.php

<?php/**
 * php 根据自增id创建唯一编号类
 * Date:    2016-11-27
 * Author:  fdipzone
 * Ver:     1.0
 *
 * Func
 * Public create 创建编号
 */class IDCode{ // class start

    /**
     * 创建编号
     * @param  Int    $id         自增id
     * @param  Int    $num_length 数字最大位数
     * @param  String $prefix     前缀
     * @return String
     */
    public static function create($id, $num_length, $prefix){

        // 基数
        $base = pow(10, $num_length);        // 生成字母部分
        $pision = (int)($id/$base);        $word = &#39;&#39;;        while($pision){            
        $tmp = fmod($pision, 26); // 只使用26个大写字母
            $tmp = chr($tmp + 65);      // 转为字母
            $word .= $tmp;            $pision = floor($pision/26);
        }        if($word==&#39;&#39;){            $word = chr(65);
        }        // 生成数字部分
        $mod = $id % $base;        $digital = str_pad($mod, $num_length, 0, STR_PAD_LEFT);        
        $code = sprintf(&#39;%s-%s-%s&#39;, $prefix, $word, $digital);        return $code;

    }

} // class end?>
demo.php

<?phprequire &#39;IDCode.class.php&#39;;$test_ids = array(1,9,10,99,100,999,1000,1009,2099,3999,9999,14999,99999);foreach($test_ids as $test_id){    
echo $test_id.&#39; = &#39;.IDCode::create($test_id, 3, &#39;F&#39;).&#39;<br>&#39;;
}?>
출력:
1 = F-A-0019 = F-A-00910 = F-A-01099 = F-A-099100 = F-A-100999 = F-A-9991000 = F-B-0001009 = F-B-0092099 = F-C-0993999 = F-D-9999999 = F-J-99914999 = 
F-O-99999999 = F-VD-999

소스코드 다운로드 주소: 클릭하시면 보실 수 있습니다



개발 프로세스에서 우리의 데이터 테이블은 일반적으로 자동 증가 숫자를 id 기본 키로 사용합니다. id는 숫자 유형이므로 이해하기 쉽지 않습니다. ID를 특정 형식에 따라 숫자로 변환한 후에는 숫자를 기반으로 콘텐츠가 무엇을 나타내는지 쉽게 알 수 있습니다. 예를 들어 주문 테이블 id=20160111197681234

. 하지만 변환된 ID만으로는 이 ID가 주문 테이블의 ID인지 알 수 없습니다.

O-20160111197681234

번으로 주문 테이블의 기록임을 확인하고, ID를 기준으로 주문 테이블에서 검색하면 매우 어렵습니다.

숫자 생성 규칙
1. 고유
고유성을 보장하기 위해 자동 증가 ID를 사용하여 생성

2. 🎜 >문자에 해당하는 나머지 숫자를 사용하여 더 짧은 숫자를 만들 수 있습니다


알고리즘 원리


1. 사용자 정의 접두사를 추가하여
2. 형식은 접두어 + 문자 + 숫자로 구성됩니다. 숫자는 N자리만 허용됩니다. 초과되는 숫자는 숫자의 나머지 방법을 사용하여 대응합니다.

예:

id=1

Prefix = F

3자리 숫자

를 유지하는 경우 생성된 번호는

F-A-001




코드입니다.

IDCode.class.php

<?php/**
 * php 根据自增id创建唯一编号类
 * Date:    2016-11-27
 * Author:  fdipzone
 * Ver:     1.0
 *
 * Func
 * Public create 创建编号
 */class IDCode{ // class start

    /**
     * 创建编号
     * @param  Int    $id         自增id
     * @param  Int    $num_length 数字最大位数
     * @param  String $prefix     前缀
     * @return String
     */
    public static function create($id, $num_length, $prefix){

        // 基数
        $base = pow(10, $num_length);        // 生成字母部分
        $pision = (int)($id/$base);        $word = &#39;&#39;;        while($pision){            
        $tmp = fmod($pision, 26); // 只使用26个大写字母
            $tmp = chr($tmp + 65);      // 转为字母
            $word .= $tmp;            $pision = floor($pision/26);
        }        if($word==&#39;&#39;){            $word = chr(65);
        }        // 生成数字部分
        $mod = $id % $base;        $digital = str_pad($mod, $num_length, 0, STR_PAD_LEFT);        
        $code = sprintf(&#39;%s-%s-%s&#39;, $prefix, $word, $digital);        return $code;

    }

} // class end?>

demo.php

<?phprequire &#39;IDCode.class.php&#39;;$test_ids = array(1,9,10,99,100,999,1000,1009,2099,3999,9999,14999,99999);foreach($test_ids as $test_id){    
echo $test_id.&#39; = &#39;.IDCode::create($test_id, 3, &#39;F&#39;).&#39;<br>&#39;;
}?>

출력:

1 = F-A-0019 = F-A-00910 = F-A-01099 = F-A-099100 = F-A-100999 = F-A-9991000 = F-B-0001009 = F-B-0092099 = F-C-0993999 = F-D-9999999 = F-J-99914999 = 
F-O-99999999 = F-VD-999
위는 자체 증가하는 ID를 기반으로 고유한 숫자 클래스를 생성하는 PHP의 내용입니다. PHP 중국어 웹사이트(www.php.cn)를 주목하세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.