Как создать 6 постоянных ссылок на символы? - PullRequest
1 голос
/ 12 октября 2011

Я хочу создать короткую 6-символьную ссылку при каждом нажатии кнопки отправки.

Я хочу сказать, что когда человек нажимает кнопку отправки, я хочу взять введенные данные и сохранить их в базе данных.и создайте для него постоянную ссылку.Он должен быть длиной 6 символов и содержать только [az] [AZ] [0-9].

Я сохраню строку из 6 символов в базе данных с введенными данными.

Так какДолжен ли я сделать этот код и как я должен генерировать 6 символов?

И кстати, я думал о создании этого кода на PHP ...

Спасибо ...

Ответы [ 2 ]

1 голос
/ 12 октября 2011

Используйте столбец int в вашей БД в качестве первичного ключа, который автоматически увеличивается при вставке, затем преобразуйте этот идентификатор из десятичной в базовую-62 в вашей логике для постоянной ссылки (62 позволяет использовать 0-9, az и AZ) .

При создании новой постоянной ссылки:

<?php

/**
 * Convert decimal int to a base-62 string
 *
 * @param int $dec
 * @returns string
 */
function toBase62 ($dec) {

  // 0 is always 0
  if ($dec == 0)
    return "0";

  // this array maps decimal keys to our base-62 radix digits
  $values = array(
    "0", "1", "2", "3", "4", 
    "5", "6", "7", "8", "9", 
    "A", "B", "C", "D", "E",
    "F", "G", "H", "I", "J",
    "K", "L", "M", "N", "O",
    "P", "Q", "R", "S", "T",
    "U", "V", "W", "X", "Y", 
    "Z", "a", "b", "c", "d", 
    "e", "f", "g", "h", "i", 
    "j", "k", "l", "m", "n", 
    "o", "p", "q", "r", "s", 
    "t", "u", "v", "w", "x", 
    "y", "z"
  );

  // convert negative numbers to positive.
  $neg = $dec < 0;
  if ($neg)
    $dec = 0 - $dec;

  // do the conversion:
  $chars = array(); // this will store our base-62 chars

  while ($dec > 0) {

    $val = $dec % 62;

    $chars[] = $values[$val];

    $dec -= $val;
    $dec /= 62;

  }

  // add zero-padding:
  while (count($chars) < 6)
    $chars[] = '0';

  // convert to string
  $rv = implode( '' , array_reverse($chars) );

  // if input was negative:
  return $neg ? "-$rv" : $rv;

}


// Usage example:

// ... do mysql insert here and retrieve new insert_id into var $id ...

$permalink = toBase62($id);

?>

При декодировании запрошенной постоянной ссылки:

<?php

/**
 * Convert base-62 string to a decimal int
 *
 * @param string $str
 * @returns int on success, FALSE on failure
 */
function base62ToInt ($str) {

  // validate str:
  if ( ! preg_match('/^\-?[0-9A-Za-z]+$/', $str) )
    return FALSE; // not a valid string

  // "0" is always 0 (as is "0000...")
  if ( preg_match('/^0+$', $str) )
    return 0;

  // this array maps decimal keys to our base-62 radix digits
  $values = array(
    "0", "1", "2", "3", "4", 
    "5", "6", "7", "8", "9", 
    "A", "B", "C", "D", "E",
    "F", "G", "H", "I", "J",
    "K", "L", "M", "N", "O",
    "P", "Q", "R", "S", "T",
    "U", "V", "W", "X", "Y", 
    "Z", "a", "b", "c", "d", 
    "e", "f", "g", "h", "i", 
    "j", "k", "l", "m", "n", 
    "o", "p", "q", "r", "s", 
    "t", "u", "v", "w", "x", 
    "y", "z"
  );

  // flip $values so it maps base-62 digits to decimal values:
  $values = array_flip($values);

  // get chars from $str:
  $chars = str_split($str);

  // convert negative numbers to positive.
  $neg = $chars[0] == '-';

  if ($neg)
    array_shift($chars);

  // do the conversion:
  $val = 0;
  $i = 0;

  while ( count($chars) > 0 ) {

    $char = array_pop($chars);
    $val += ($values[$char] * pow(62, $i) );
    ++$i;

  }

  return $neg ? 0 - $val : $val;
}


// Usage example:

// ... assuming permalink has been put in a var called $permalink

$id = base62ToInt($permalink);

// ... now look up $id in DB

?>
0 голосов
/ 12 октября 2011

Вы можете использовать составной ключ для постоянной ссылки.Я просто предполагаю, что ваша структура таблицы базы данных.

|Id |Tile                                       |
-------------------------------------------------
|1  | Lorem ipsum dolor sit amet                |
|2  | consectetur adipiscing elit               |
|3  | Vestibulum posuere bibendum scelerisque   |

Я предполагаю, что id является значением автоинкремента.

Теперь вы можете генерировать уникальную постоянную ссылку для каждой записи, получая 5 символов из тайлаи один символ из поля Id.Если ваш идентификатор состоит из 2 цифр, то четыре символа из поля заголовка и 2 символа из идентификатора и т. Д.

...