Soy programador a nivel profesional para un importante empresa de desarrollo de software en el noroeste de México.
Yo también hice una función parecida, hice una que me calculaba completamente el RFC (con homo clave y digito verificar) y estuve intentado hacer la de la CURP solo que con esos dos últimos caracteres hay un pequeño problemita, el penúltimo es un consecutivo para evitar duplicidad y es asignado por la Secretaria de Gobernación que para los nacidas asta el 31 de diciembre de 1999 será iniciada en "0"(cero), y del 1 de enero del 2000 en adelante el consecutivo se iniciara en "A". Y el ultimo si es un digito verificador el cual desconozco el algoritmo, así que aunque tuvieses el algoritmo no seria 100% confiable por falta de ese consecutivo, ya que sale de todo calculo lógico. pero si seria una gran ayuda el tener ese algoritmo.
Espero haberte podido ayudar un poco en si tenias alguna duda
Saludos y bye.