Encontré SVGCaptcha , e inmediatamente supe que era una mala idea.
Me gustaría que mostrara cuán mala es esta idea extrayendo el código de validación de las imágenes SVG que produce el código.
Una imagen de ejemplo se ve así:
Aquí está la fuente de la imagen de ejemplo:

<?xml version="1.0" encoding="utf-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve"
width="200" height="40"
> <rect x="0" y="0" width="200" height="40"
style="stroke: none; fill: none;" >
</rect> <text style="fill: #4d9363;" x="5" y="34" font-size="20" transform="translate(5, 34) rotate(-17) translate(-5, -34)">8</text>
<text style="fill: #be8b33;" x="125" y="29" font-size="21" transform="translate(125, 29) rotate(17) translate(-125, -29)">f</text>
<text style="fill: #d561ff;" x="45" y="35" font-size="20" transform="translate(45, 35) rotate(-2) translate(-45, -35)">4</text>
<text style="fill: #3de754;" x="85" y="31" font-size="21" transform="translate(85, 31) rotate(-9) translate(-85, -31)">8</text>
<text style="fill: #5ed4bf;" x="25" y="33" font-size="22" transform="translate(25, 33) rotate(16) translate(-25, -33)">u</text>
<text style="fill: #894aee;" x="105" y="28" font-size="25" transform="translate(105, 28) rotate(9) translate(-105, -28)">1</text>
<text style="fill: #e4c437;" x="65" y="32" font-size="20" transform="translate(65, 32) rotate(17) translate(-65, -32)">x</text>
</svg>
La entrada es la imagen SVG, que es un formato de texto.
La única restricción real es que su código debe producir los valores en el orden correcto .
Los <text>elementos de entrada están en orden aleatorio, por lo que debe prestar atención al xatributo en la <text>etiqueta
El puntaje es el número de bytes en el código
Dado que el código actualmente realiza dos transformaciones que se cancelan entre sí, puede ignorarlas, pero si las toma en consideración, continúe y obtenga una reducción del 30% de su puntaje.

Haga la dirección de ejecución de derecha a izquierda y ajuste para iniciar el bucle principal.
Lea un char de stdin y pruebe el valor de fin de archivo.
Si no es el final del archivo, verifique si es un
Si no es un
Si no, multiplíquelo por 126 y modifique por 126 2 para eliminar el valor más antiguo del par y dejar espacio para el siguiente personaje.
Cuando
Cuando
Finalmente, cuando se alcanza el final del archivo, repita los 7 valores guardados en la matriz y expórtelos uno por uno. Eso debería darte todas las letras captcha en el orden correcto.