This example describes how to generate a fixed-length, pure-digit code using php. Share it with you for your reference. The details are as follows: In many cases, we need some fixed-length numbers, such as order numbers, card numbers, and user numbers! However, we often have sequential numbers stored in the database. we can convert them into a fixed-length numeric code and update them to the database to form a unique number for this record.
- /**
- * Generate a unique ID based on the date or given prefix
- * User: minyifei.cn
- * Date: 15/7/7
- */
- Namespace Minyifei \ Libs;
- Class SequenceNumber {
- /**
- * Obtain the specified mapbit based on the display width.
- *
- * @ Param integer $ width number: display width
- *
- * @ Return array
- */
- Private static function _ getMapbit ($ width)
- {
- $ MapBits = array (
- 4 => array (
- 10, 2, 11, 3, 0, 1, 9, 7, 12, 6, 4, 8, 5,
- ),
- 5 => array (
- 4, 3, 13, 15, 7, 8, 6, 2, 1, 10, 5, 12, 0, 11, 14, 9,
- ),
- 6 => array (
- 2, 7, 10, 9, 16, 3, 6, 8, 0, 4, 1, 12, 11, 13, 18, 5, 15, 17, 14,
- ),
- 7 => array (
- 18, 0, 2, 22, 8, 3, 1, 14, 17, 12, 4, 19, 11, 9, 13, 5, 6, 15, 10, 16, 20, 7, 21,
- ),
- 8 => array (
- 11, 8, 4, 0, 16, 14, 22, 7, 3, 5, 13, 18, 24, 25, 23, 10, 1, 12, 6, 21, 17, 2, 15, 9, 19, 20,
- ),
- 9 => array (
- 24, 23, 27, 3, 9, 16, 25, 13, 28, 12, 0, 4, 10, 18, 11, 2, 17, 1, 21, 26, 5, 15, 7, 20, 22, 14, 19, 6, 8,
- ),
- 10 => array (
- 32, 3, 1, 28, 21, 18, 30, 7, 12, 22, 20, 13, 16, 15, 6, 17, 9, 25, 11, 8, 4, 27, 14, 31, 5, 23, 24, 29, 0, 10, 19, 26, 2,
- ),
- 11 => array (
- 9, 13, 2, 29, 11, 32, 14, 33, 24, 8, 27, 4, 22, 20, 5, 0, 21, 25, 17, 28, 34, 6, 23, 26, 30, 3, 7, 19, 16, 15, 12, 31, 1, 35, 10, 18,
- ),
- 12 => array (
- 31, 4, 16, 33, 35, 29, 17, 37, 12, 28, 32, 22, 7, 10, 14, 26, 0, 9, 8, 3, 20, 2, 13, 5, 36, 27, 23, 15, 19, 34, 38, 11, 24, 25, 30, 21, 18, 6, 1,
- ),
- );
- Return $ mapBits [intval ($ width)];
- }
- /**
- * Format the given timestamp
- *
- * @ Param integer $ ts timestamp, if null use current timestamp
- *
- * @ Return string
- */
- Private static function _ fmtTS ($ ts = null)
- {
- $ Ts = $ ts? : Time ();
- Return date (self ::$ _ fmt, $ ts );
- }
- /**
- * Obtain a random unique encoding based on the id.
- * @ Param $ id
- * @ Param int $ prefix
- * @ Param int $ width except the prefix length
- * @ Return string
- */
- Public static function generateNumber ($ id, $ prefix = 10, $ width = 8)
- {
- Return sprintf ("% s", $ prefix, self: encode ($ id, $ width ));
- }
- /**
- * Encoding conversion
- *
- * @ Param integer $ id
- * @ Param integer $ width indicates the display width of the additional components.
- *
- * @ Return integer
- */
- Public static function encode ($ id, $ width)
- {
- $ Maximum = intval (str_repeat (9, $ width ));
- $ Superscript = intval (log ($ maximum)/log (2 ));
- $ R = 0;
- $ Sign = 0x1 <$ superscript;
- $ Id | = $ sign;
- $ Mapbit = self: _ getMapbit ($ width );
- For ($ x = 0; $ x <$ superscript; $ x ++ ){
- $ V = ($ id >>$ x) & 0x1;
- $ R | = ($ v <$ mapbit [$ x]);
- }
- $ R + = $ maximum-pow (2, $ superscript) + 1;
- Return sprintf ("% 0 $ {width} s", $ r );
- }
- /**
- * Obtain a unique ID
- *
- * @ Param integer $ id, mostly database primary key
- * @ Param integer $ width number: display width
- * @ Param integer $ ts timestamp
- *
- * @ Return string
- */
- Public static function get ($ id, $ width, $ ts = null)
- {
- Return sprintf ('% s % s', self: _ fmtTS ($ ts), self: encode ($ id, $ width ));
- }
- }
I hope this article will help you with php programming. |