Código
Function SumaNumSucesion(num1 As Integer, num2 As Integer, min As Integer, max As Integer) As Integer Dim condicion As Integer Dim condicion2 As Integer Dim condicion3 As Integer Dim condicion4 As Integer Dim condicion5 As Integer Dim calculo As Integer Dim calculo2 As Integer Dim calculo3 As Integer Dim calculo4 As Integer condicion = Int(num1 / (max - min + 1)) ' 0 si num1 es mayor de 224 condicion2 = Int(num2 / (max - min + 1)) ' 0 si num2 es mayor de 224 condicion3 = Int((num1 + num2) / (max + 1)) '0 si num2+num1 es mayor de 255 condicion4 = Int((num1 + (num2 Mod (max - min + 1))) / (max + 1)) ' condicion5 = ((1 - Int(num1 / (max - min + 1))) * (Int(num2 / (max - min + 1))) + (Int(num1 / (max - min + 1))) * (1 - Int(num2 / (max - min + 1)))) calculo = num1 + num2 calculo2 = num1 - (max - min + 1 - num2) calculo3 = (num1 + (num2 Mod (max - min + 1))) Mod (max - min + 1) calculo4 = num1 + (num2 Mod (max - min + 1)) SumaNumSucesion = (calculo) * (1 - condicion3) + ((calculo2) * (condicion5) + ((calculo3) * (condicion4) + (calculo4) * (1 - condicion4)) * (1 - condicion5)) * (condicion3) End Function
Código:
Function restaNumSucesion(num1 As Integer, num2 As Integer, min As Integer, max As Integer) As Integer
Dim condicion As Integer
Dim condicion2 As Integer
Dim condicion3 As Integer
Dim condicion4 As Integer
Dim calculo As Integer
Dim calculo2 As Integer
Dim calculo3 As Integer
Dim calculo4 As Integer
condicion = Int((num1 - num2 + (max - min + 1)) / (max + 1)) 'num 1 - num2 >31 = 1 si cierto
condicion2 = Int(num2 / (max - min + 1)) ' 0 si es menor de 224
condicion3 = Int(((num1 - (num2 Mod (max - min + 1)) + (max - min + 1))) / (max + 1))
calculo = num1 - num2
calculo2 = max + 1 - (num2 - (num1 - min))
calculo3 = num1 - (num2 Mod (max - min + 1))
calculo4 = max + 1 - (num2 Mod (max - min + 1) - (num1 - min))
restaNumSucesion = (1 - condicion2) * ((calculo) * (condicion) + (calculo2) * (1 - condicion)) + (condicion2) * ((condicion3) * (calculo3) + (1 - condicion3) * (calculo4))
End Function
Bueno Decidí meterlo en variables para que el código fuera mas legible.
Estuve realizando un algoritmo de cifrado de cadenas de texto y se me ocurrio la idea de realizar los siguiente( no se si ya existirá en la actualidad, supongo que si...)
Código
Public Function jrgStringToString(cadena As String) As String Dim i As Integer cadenaAux = "" Dim num1 As Integer Dim num2 As Integer Dim min As Integer Dim max As Integer min = 31 max = 254 Dim caracter1, caracter2 As String Dim mitad As Long mitad = Len(cadena) / 2 For i = 1 To mitad Step 1 caracter1 = Mid(cadena, i, 1) caracter2 = Mid(cadena, i + Len(cadena) / 2, 1) num1 = Asc(caracter1) num2 = Asc(caracter2) cadenaAux = cadenaAux & Chr(restaNumSucesion(num1, num2, min, max)) Next jrgStringToString = cadenaAux End Function
Código
Public Function stringToJrgString(cadena As String) As String Dim i As Long Dim max As Integer Dim min As Integer Dim num1 As Integer Dim num2 As Integer Dim cadenaAux As String Dim cadenaAux2 As String Dim NumAleatorio As Integer min = 31 max = 254 cadenaAux = "" cadenaAux2 = "" For i = 1 To Len(cadena) NumAleatorio = aleatorio(Mid(cadena, i, 1)) num1 = Asc(Mid(cadena, i, 1)) cadenaAux = cadenaAux & Chr(SumaNumSucesion(num1, NumAleatorio, min, max)) cadenaAux2 = cadenaAux2 & Chr(NumAleatorio) Next stringToJrgString = cadenaAux & cadenaAux2 End Function
Código:
Public Function aleatorio(caracter As String) As Integer
Call Randomize
Dim NumAleatorio As Integer
NumAleatorio = Int((254 - 31) * Rnd() + 31)
aleatorio = NumAleatorio
End Function
Call Randomize
Dim NumAleatorio As Integer
NumAleatorio = Int((254 - 31) * Rnd() + 31)
aleatorio = NumAleatorio
End Function
El código es simple lo que hace es que una cadena ya sea "hola que tal".
Recorre la cadena por caracter y va haciendo lo siguiente:
stringtoJRGstring():
cadena1resultado=asc(h) & asc(o) & asc(l) &....asc(l)
cadena2resultado=chr(asc(h)+ numAleatorio)
stringtoJRGstring=cadena1resultado & cadena2resultado
jrgstringtoString(): divide la cadena en 2 cadenas ya que será par. la primera cadena son los caracteres y la segunda cadena pasada a ascci son los numeros que le tenemos que restar a su caracter, para que nos devuelva su verdadero valor en caracter.
PD. No se si ya existiría por algún lado, se me ocurrio y lo programe. Si teneis alguna duda preguntarme no se si me habré explicado bien. Un saludo