Cómo generar enlaces cortos usando java
Debido a las necesidades de promoción de la empresa, necesitamos un programa de generación de enlaces cortos. Hace unos días vi a alguien publicando una versión .net del algoritmo de enlaces cortos en MSDN, así que lo convertí a Java. . Versión, sácala y disfrútala ***
Ideas de generación:
1. Combina "enlace original (enlace largo) + clave (cadena personalizada para evitar fugas de algoritmo)". Cifrado MD5
2. Opere los caracteres cifrados de acuerdo con la configuración hexadecimal de 8 bits con el bit 0x3FFFFFFF. El valor obtenido se combina con el bit 0x0000003D para obtener el índice de caracteres de la matriz de caracteres y la suma de. los caracteres. , cada ciclo se desplaza hacia la derecha 5 bits y coloca la cadena correspondiente al índice en la matriz de salida (4 grupos de cadenas de 6 dígitos)
3. dígitos y extráigalo de la matriz de entrada Saque la cadena correspondiente al número aleatorio, úsela como un enlace corto y guárdela en la base de datos o NoSql
Análisis
Escribir un programa de procesamiento web de ur (por ejemplo: al analizar el enlace corto, haga coincidir el enlace corto analizado (zAnuAn) con el enlace original en la base de datos, haga coincidir el enlace corto (zAnuAn) con el enlace original almacenado en la base de datos y luego redirigirlo al enlace original coincidente
paquete com.bjdata.test;
importar java.security.MessageDigest;
importar java.util.Random;
clase pública ShortUrlTest {
public static void main(String[] args) {
String sLongUrl = "/bbs/_t_278433840/" // Enlace sin formato;
System.println( "longUrl: "+sLongUrl);
String[] aResult = shortUrl(sLongUrl);// Generará 4 grupos de cadenas de 6 dígitos
//Imprime los resultados
for (int i = 0; i < aResult.println ("Enlace corto: "+aResult[j]);//toma uno aleatorio como resultado corto link
}
public static String[] shortUrl(String url) {
//Puedes personalizar la generación de caracteres de cifrado MD5 antes de pasar la CLAVE mixta
String key = "test";
//Para usar los caracteres de URL generados
String[] chars = new String[] { "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"," 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"
};
//Cifrar la URL de entrada con MD5
Cadena hexadecimal = md5ByHex(ke
y + url);
String[] resUrl = new String[4];
for (int i = 0; i < 4; i++) {
// Convierte los bits de caracteres cifrados a 0x3FFFFFFF hexadecimal de 8 dígitos
String sTempSubString = hex.substring(i * 8, i * 8 + 8);
// Aquí tienes Es necesario utilizar el tipo largo para la conversión, porque Inteper .parseInt() solo puede manejar 31 bits, el primer bit es el bit de signo, el segundo bit es el bit de signo y el primer bit es el bit de signo.
El primer bit es el bit de signo. Si no se usa long, estará fuera de los límites
long lHexLong = 0x3FFFFFFFF & Long.parseLong(sTempSubString, 16);
String outChars. = "";
for (int j = 0; j < 6; j++) {
// Realice la operación de suma de bits en 0x0000003D para obtener el índice de los caracteres de la matriz de caracteres
long index = 0x0000003D & lHexLong;
// Agrega los caracteres obtenidos
outChars += chars[(int) index];
// Cada segundo bucle, desplazamiento hacia la derecha 5 bits
lHexLong = lHexLong >> 5;
}
// Almacena la cadena en el matriz de salida en el índice correspondiente
resUrl[i] = outChars;
}
return resUrl;
}
/**
* Cifrado MD5 (mayúsculas de 32 bits)
* @param src
* @return
*
cadena estática pública md5ByHex(String src) {
prueba {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] b = src.getBytes();
md.reset();
md.update(b);
byte[] hash = md .digest();
md.update(b)digest();
Cadena hs = "";
Cadena stmp = "";
p>for (int i = 0; i <. hash.length; i++) {
stmp = Integer.toHexString(hash[i] & 0xFF );
if (stmp.length() == 1)
hs = hs + "0" + stmp;
else {
hs = hs + stmp;
}
}
return hs.toUpperCase();
} catch (Excepción e) {
regresar "";
}
}
}
}
}
}
}
}
}
}
Resultados de ejecución
Enlace largo:/bbs/_t_278433840/
[0]:fa6bUr
[1]:ryEfeq
[ 2]:zAnuAn
[3]:auIJne
Enlace corto:zAnuAn