Perdon por retrasarme. Siento revivir temas antiguos no he tenido mucho tiempo de pasarme por el foro. Os pongo la función y os digo que hace:
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
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...)
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
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
Public Function aleatorio(caracter As String) As Integer
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