Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]W ilu znakach da się zakodować liczby z przedziału 1-10mln ?, 4 czy 5 ?
-Mesajah-
post
Post #1





Goście







Zastanawiam się, jakiej translacji id używają serwisy (np. youtube) w linkach typu:
http://www.youtube.com/watch?v=kNjyHwySxdI

Jeśli trzeba by zakodować w ten sposób 10 milionów kolejnych liczb (1-10.000.000) to dałoby się to zrobić w 4 znakach czy
trzeba użyć 5 ?

Pomijając czy 4 czy 5 to w jaki sposób najprościej zakodować taką liczbę (np. 3123576) na krótszy symbol znakowy, żeby szybko ją zdekodować.
Są do tego jakieś funkcje, czy trzeba kombinować z zapisywaniem np. każdych 3 cyfr za pomocą 2 znaków, robić jakieś tablice i się w ten sposób bawić ?
Go to the top of the page
+Quote Post
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


W URL-u podwaj to liczbę w systemie 36-owym (a-z0-9), a w bazie danych trzymaj "klasyczne" ID - base_convert
Go to the top of the page
+Quote Post
thek
post
Post #3





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Zależy od tego czego użyjesz jako podstawę. Jeśli alfanumeryczną to bierz 36. Jeśli dodatkowo jest case-sensitive to podstawa rośnie do 62 (2*26 znaków + 10 cyfr). W efekcie masz:
dla 36:
1 znak - 36
2 znaki - 1.296
3 znaki - 46.656
4 znaki - 1.679.616
5 znaków - 60.466.176

dla 62:

1 znak - 62
2 znaki - 3.844
3 znaki - 238.328
4 znaki - 14.776.336
5 znaków - 916.132.832

I teraz chyba wiesz czemu niektórzy mówią o 4, a inni o 5 znakach. Chodzi o to czy w zakodowanej liczbie zwraca się uwagę na wielkość znaków.

Jak już wspomniał Crozin, to ja bym tutaj nie uważał na wielkość, bo przeglądarki mogą Ci po drodze to wypaczyć i przez to kompletnie zmienić cel linka. Użyj tak jak radził wyżej Crozin "Base36". Jest pewniejsza, czy też raczej odporniejsza na takie przekłamania, choć zajmuje nieco więcej miejsca, ale to już drobiazg w sumie (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
-Mesajah-
post
Post #4





Goście







Dzięki za info.
Skoro więc na 4 znakach da się zakodować 14.776.336 cyfr to już całkiem nieźle (zapomniałem o możliwości
rozróżniania wielkości liter (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
-Mesajah-
post
Post #5





Goście







Cytat(thek @ 3.03.2011, 09:17:45 ) *
Jak już wspomniał Crozin, to ja bym tutaj nie uważał na wielkość, bo przeglądarki mogą Ci po drodze to wypaczyć i przez to kompletnie zmienić cel linka. Użyj tak jak radził wyżej Crozin "Base36". Jest pewniejsza, czy też raczej odporniejsza na takie przekłamania, choć zajmuje nieco więcej miejsca, ale to już drobiazg w sumie (IMG:style_emoticons/default/smile.gif)


Aha, rozumiem.
Też czułem, że z tym case sensitive może być problem, więc spróbuje to pominąć (chociaż youtube tak ma).
Go to the top of the page
+Quote Post
erix
post
Post #6





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




W sumie, to jeszcze możesz skorzystać z liczby ujemnej... (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 18:15