Php method for generating fixed-length pure digital encoding

Source: Internet
Author: User
Php method for generating fixed-length pure digital encoding

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.

  1. /**
  2. * Generate a unique ID based on the date or given prefix
  3. * User: minyifei.cn
  4. * Date: 15/7/7
  5. */
  6. Namespace Minyifei \ Libs;
  7. Class SequenceNumber {
  8. /**
  9. * Obtain the specified mapbit based on the display width.
  10. *
  11. * @ Param integer $ width number: display width
  12. *
  13. * @ Return array
  14. */
  15. Private static function _ getMapbit ($ width)
  16. {
  17. $ MapBits = array (
  18. 4 => array (
  19. 10, 2, 11, 3, 0, 1, 9, 7, 12, 6, 4, 8, 5,
  20. ),
  21. 5 => array (
  22. 4, 3, 13, 15, 7, 8, 6, 2, 1, 10, 5, 12, 0, 11, 14, 9,
  23. ),
  24. 6 => array (
  25. 2, 7, 10, 9, 16, 3, 6, 8, 0, 4, 1, 12, 11, 13, 18, 5, 15, 17, 14,
  26. ),
  27. 7 => array (
  28. 18, 0, 2, 22, 8, 3, 1, 14, 17, 12, 4, 19, 11, 9, 13, 5, 6, 15, 10, 16, 20, 7, 21,
  29. ),
  30. 8 => array (
  31. 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,
  32. ),
  33. 9 => array (
  34. 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,
  35. ),
  36. 10 => array (
  37. 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,
  38. ),
  39. 11 => array (
  40. 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,
  41. ),
  42. 12 => array (
  43. 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,
  44. ),
  45. );
  46. Return $ mapBits [intval ($ width)];
  47. }
  48. /**
  49. * Format the given timestamp
  50. *
  51. * @ Param integer $ ts timestamp, if null use current timestamp
  52. *
  53. * @ Return string
  54. */
  55. Private static function _ fmtTS ($ ts = null)
  56. {
  57. $ Ts = $ ts? : Time ();
  58. Return date (self ::$ _ fmt, $ ts );
  59. }
  60. /**
  61. * Obtain a random unique encoding based on the id.
  62. * @ Param $ id
  63. * @ Param int $ prefix
  64. * @ Param int $ width except the prefix length
  65. * @ Return string
  66. */
  67. Public static function generateNumber ($ id, $ prefix = 10, $ width = 8)
  68. {
  69. Return sprintf ("% s", $ prefix, self: encode ($ id, $ width ));
  70. }
  71. /**
  72. * Encoding conversion
  73. *
  74. * @ Param integer $ id
  75. * @ Param integer $ width indicates the display width of the additional components.
  76. *
  77. * @ Return integer
  78. */
  79. Public static function encode ($ id, $ width)
  80. {
  81. $ Maximum = intval (str_repeat (9, $ width ));
  82. $ Superscript = intval (log ($ maximum)/log (2 ));
  83. $ R = 0;
  84. $ Sign = 0x1 <$ superscript;
  85. $ Id | = $ sign;
  86. $ Mapbit = self: _ getMapbit ($ width );
  87. For ($ x = 0; $ x <$ superscript; $ x ++ ){
  88. $ V = ($ id >>$ x) & 0x1;
  89. $ R | = ($ v <$ mapbit [$ x]);
  90. }
  91. $ R + = $ maximum-pow (2, $ superscript) + 1;
  92. Return sprintf ("% 0 $ {width} s", $ r );
  93. }
  94. /**
  95. * Obtain a unique ID
  96. *
  97. * @ Param integer $ id, mostly database primary key
  98. * @ Param integer $ width number: display width
  99. * @ Param integer $ ts timestamp
  100. *
  101. * @ Return string
  102. */
  103. Public static function get ($ id, $ width, $ ts = null)
  104. {
  105. Return sprintf ('% s % s', self: _ fmtTS ($ ts), self: encode ($ id, $ width ));
  106. }
  107. }

I hope this article will help you with php programming.

Php

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.