Roberto Sánchez - Programador .NET/C++

Recursos para programadores/desarrolladores C#.

Librería de cálculo matemático 'Maths.dll', versión 9.8.

Ensamblado .NET 5.0 escrito íntegramente en lenguaje C# para cálculo matemático. Comprende las siguientes funcionalidades:

- Números complejos.

- Matrices de dos, tres y cuatro dimensiones.

- Vectores de dos y tres dimensiones.

- Evaluador de expresiones aritméticas y algebraicas.

- Operadores sumatorio (números, funciones y tipo BigUInt), multiplicatorio (números, funciones y tipo BigUInt), factoriales (números, funciones y tipo BigUInt), factorización (sólo números) y derivadas numéricas de funciones.

- Resolución de integrales definidas por los métodos de Boole, quinto orden, sexto orden, trapezoidal, Simpson 1/3 y Simpson 3/8.

- Delegado para obtención de resultados parciales en operadores sumatorio, multiplicatorio, factorial e integrales.

- Cálculo geométrico en dos dimensiones: líneas, rayos, círculos y cuadrados.

- Cálculo geométrico en tres dimensiones: cubos, cilindros, pirámides, esperas y tetrahedros.

- Amplio conjunto de constantes universales, fisico-químicas, electromagnéticas, notación científica, etc.

- Números primos.

- Números racionales.

- Secuencia de Fibonacci.

- Cálculo estadístico (estadísticas de una variable, distribución normal y distribución Poisson).

- Operadores booleanos.

- Cuaterniones.

- Resolución de ecuaciones lineales de dos, tres y cuatro incógnitas.

- Resolución de ecuaciones polinómicas de segundo grado.

- Cálculos de máximo común divisor y mínimo común múltiplo.

- Sobrecargas de operadores para las estructuras de tipos algebricos y geométricos.

- Conversiones binario/decimal/hexadecimal/octal.

- Estructura BigUInt representativa de grandes números enteros sin signo, así como sus principales sobrecargas de operadores.

El proyecto se encuentra en continuo desarrollo. Si estás intteresado en contribuir con el proyecto, házmelo saber. Todas las sugerencias y aportaciones serán bien recibidas.

También disponible en lenguaje C++ en la sección de recursos de C++.

Validation.dll

Bibloteca estática de clases sin constructor, con tres métodos para el cálculo de validación de correo electrónico, número de CIF y número de IBAN.

using System;
using System.Text;
using System.Text.RegularExpressions;
namespace RSoftware.Validation
{
    /// <summary>
    /// Validation rules.
    /// </summary>
    public static class ValidationRules
    {
        /// <summary>
        /// Validates CIF numer.
        /// </summary>
        /// <param name="numberCIF">The CIF number to validate.</param>
        /// <returns>
        /// <para>Returns 'true' if the validation is correct.</para>
        /// <para>Returns 'false' if the validation is not correct.</para>
        /// </returns>
        public static bool ValidateNumberCIF(string numberCIF)
        {
            if (string.IsNullOrEmpty(numberCIF) == true)
                return false;
            numberCIF = numberCIF.Trim().ToUpper();
            if (numberCIF.Length != 9)
                return false;
            string firstChar = numberCIF.Substring(0, 1);
            string firstCharacterInterval = "ABCDEFGHJNPQRSUVW";
            if (firstCharacterInterval.IndexOf(firstChar) == -1)
                return false;
            try
            {
                int pairSum = default(int);
                int oddSum = default(int);
                string numberCIFWithoutCheckDigit = numberCIF.Substring(0, 8);
                string digits = numberCIFWithoutCheckDigit.Substring(1, 7);
                for (int n = 0; n <= digits.Length - 1; n += 2)
                {
                    if (n < 6)
                        pairSum += Convert.ToInt32(digits[n + 1].ToString());
                    int doubleOdd = 2 * Convert.ToInt32(digits[n].ToString());
                    oddSum += (doubleOdd % 10) + (doubleOdd / 10);
                }
                int totalSum = pairSum + oddSum;
                totalSum = (10 - (totalSum % 10)) % 10;
                string checkDigit = string.Empty;
                switch (firstChar)
                {
                    case "N":
                    case "P":
                    case "Q":
                    case "R":
                    case "S":
                    case "W":
                        char[] characters = { 'J', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I' };
                        checkDigit = characters[totalSum].ToString();
                        break;
                    default:
                        checkDigit = totalSum.ToString();
                        break;
                }
                return checkDigit.Equals(numberCIF.Substring(8, 1));
            }
            catch
            {
                return false;
            }
        }
        /// <summary>
        /// Validates email format.
        /// </summary>
        /// <param name="email">The email to validate.</param>
        /// <returns>
        /// <para>Returns 'true' if the validation is correct.</para>
        /// <para>Returns 'false' if the validation is not correct.</para>
        /// </returns>
        public static bool ValidateEmail(string email)
        {
            if (string.IsNullOrEmpty(email) == true)
                return false;
            string format = "\w+([-+.']\w+)*\w+([-.]\w+)*\.\w+([-.]\w+)*";
            if (Regex.IsMatch(email, format))
            {
                if (Regex.Replace(email, format, string.Empty).Length == 0)
                    return true;
                else
                    return false;
            }
            else
                return false;
        }
        /// <summary>
        /// Validates IBAN number.
        /// </summary>
        /// <param name="numberIBAN">The IBAN number to validate.</param>
        /// <returns>
        /// <para>Returns 'true' if the validation is correct.</para>
        /// <para>Returns 'false' if the validation is not correct.</para>
        /// </returns>
        public static bool ValidateNumberIBAN(string numberIBAN)
        {
            if (string.IsNullOrEmpty(numberIBAN))
                return false;
            else
            {
                if (Regex.IsMatch(numberIBAN, "^[A-Z0-9]"))
                {
                    string bank = numberIBAN.Substring(4, numberIBAN.Length - 4) + numberIBAN.Substring(0, 4);
                    int asciiShift = 55;
                    var stringBuilder = new StringBuilder();
                    foreach (char character in bank)
                    {
                        int variable;
                        if (char.IsLetter(character))
                            variable = character - asciiShift;
                        else
                            variable = int.Parse(character.ToString());
                        stringBuilder.Append(variable);
                    }
                    string checksumString = stringBuilder.ToString();
                    int checksum = int.Parse(checksumString.Substring(0, 1));
                    for (int counter = 1; counter < checksumString.Length; counter++)
                    {
                        int variable = int.Parse(checksumString.Substring(counter, 1));
                        checksum *= 10;
                        checksum += variable;
                        checksum %= 97;
                    }
                    return checksum == 1;
                }
                else
                    return false;
            }
        }
    }
}