Генерация короткой ссылки на php

Категория: Разработка
Дата публикации 29-07-2019
Количесво просмотров 1668
Количесво комментариев 1

Простая функция на php генерации короткой ссылки, например, из id ссылки. Сначала сохраняем в базу данных ссылку получаем её id и прогоняем через функцию GetShortUrl, на выходе получаем строку сокращенной ссылки и сохраняем её к записи данной ссылки. Очень удобно если делаете рассылку и в письме нужно указать ссылку на это письмо для online просмотра (в этом случае не забудьте добавить токен для защиты от случайных переходов). Дополнительно есть возможность сделать ссылки одного размера, например, 6 символов как в данном примере. Для большого количества вариаций можно использовать кириллические символы, но внешнее может вызывать путаницу.

function getShortUrl(int $a)
{
	$array = array (
		"0", // 0
		"1", // 1
		"2", // 2
		"3", // 3
		"4", // 4
		"5", // 5
		"6", // 6
		"7", // 7
		"8", // 8
		"9", // 9
		"a", // 10
		"b", // 11
		"c", // 12
		"d", // 13
		"e", // 14
		"f", // 15
		"g", // 16
		"h", // 17
		"i", // 18
		"j", // 19
		"k", // 20
		"l", // 21
		"m", // 22
		"n", // 23
		"o", // 24
		"p", // 25
		"q", // 26
		"r", // 27
		"s", // 28
		"t", // 29
		"u", // 30
		"v", // 31
		"w", // 32
		"x", // 33
		"y", // 34
		"z", // 35
		"A", // 36
		"B", // 37
		"C", // 38
		"D", // 39
		"E", // 40
		"F", // 41
		"G", // 42
		"H", // 43
		"I", // 44
		"J", // 45
		"K", // 46
		"L", // 47
		"M", // 48
		"N", // 49
		"O", // 50
		"P", // 51
		"Q", // 52
		"R", // 53
		"S", // 54
		"T", // 55
		"U", // 56
		"V", // 57
		"W", // 58
		"X", // 59
		"Y", // 60
		"Z", // 61		
	);	
	$mas = array_reverse(getRemaindersDividedBy62($a));
	$string = "";
	foreach ($mas as $value)
	{
		$string .= $array[$value];
	}	
	// если нужно какое-то минимальное количество символов
	$strlen = strlen($string);
	if ($strlen < 6) {	
		for ($i = 0; $i < (6 - $strlen); $i++) {
			$string = "0".$string;
		}		
	}		

	return $string;
}

// получает массив остатков от деления на 62 
function getRemaindersDividedBy62(int $a, array $arr = [])
{
	$b = $a/62;	
	$arr[] = $a%62;
	if ($b >= 1) {		
		$arr = func_62((int) $b, $arr);
	}

	return $arr;
}

echo getShortUrl(100000000);

Результат: 06LAze

Метки: php
Комментарии
Павел / 30-07-2019
Спасибо за хорошее решение
Ваше имя: * Комментарий: *
* - поля обязательные для заполнения