feat: add url shortner

This commit is contained in:
Krispire Admin
2026-05-11 16:13:22 +05:30
parent f2889a5679
commit 5e0a484239
17 changed files with 1305 additions and 13 deletions
+38
View File
@@ -0,0 +1,38 @@
package shorturl
import (
"crypto/rand"
"fmt"
"math/big"
"regexp"
)
// CodeLength is the length of generated short codes. 10 base36 characters
// give 36^10 ≈ 3.6 × 10^15 combinations.
const CodeLength = 10
// codeAlphabet is the base36 alphabet (lowercase letters + digits).
const codeAlphabet = "abcdefghijklmnopqrstuvwxyz0123456789"
var codeAlphabetBig = big.NewInt(int64(len(codeAlphabet)))
// RandomCode returns a cryptographically random base36 code of CodeLength chars.
func RandomCode() (string, error) {
buf := make([]byte, CodeLength)
for i := range buf {
n, err := rand.Int(rand.Reader, codeAlphabetBig)
if err != nil {
return "", fmt.Errorf("random code: %w", err)
}
buf[i] = codeAlphabet[n.Int64()]
}
return string(buf), nil
}
var validCodeRe = regexp.MustCompile(`^[a-z0-9]{4,16}$`)
// ValidCode returns true if s could plausibly be a short code we issued.
// Lenient on length (4-16) to allow future tuning without breaking old links.
func ValidCode(s string) bool {
return validCodeRe.MatchString(s)
}