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

Recursos para programadores/desarrolladores C#.

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

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 y funciones), multiplicatorio (números y funciones), factoriales (números y funciones), 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.

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;
            }
        }
    }
}