Checking and validating phone numbers.

In applications sometimes is needed check and verify if a phone number is valid or possible if the number have all required digits to be valid for this purpose there are several options to tackle the problem like regular expressions for example to validate E.164 format, library like the Google libphonenumber and API like the Twillio Lookup for something more complete.

for this post i created a small app for test a demo purpose using the python port of the Google library

the app takes the country and the phone number then it validate and check against the python phonenumbers data.
check phone number app

In the form after select the country the calling code of the country is set and then with the number is, the number is formatted in E.164 and send as JSON in a request to a python micro-service running Python bottle and the library
Request:

{
  "phone_number":"+40721234567",
  "country_code":"RO"
}

Response:

{
  "possible_number": true,
  "number_data": "Country Code: 40 National Number: 721234567",
  "valid_number": true,
  "carrier_data": "Vodafone"
}

for the country data on the calling codes i found a excellent repository https://mledoze.github.io/countries/ with the data included in different formats very useful, for the country combo box i use react and semantic-ui.

the code for the form and the python micro-service are in github:

form and javascript: https://github.com/jms/check-phone-number

Python micro-service: https://github.com/jms/check-phone-number-service

The app was deployed on Openshift and can be tested on the following link: http://checkphonenumber-jms.rhcloud.com/

References:

http://bottlepy.org/docs/dev/index.html
https://github.com/googlei18n/libphonenumber
https://github.com/daviddrysdale/python-phonenumbers
http://en.wikipedia.org/wiki/E.164
https://www.twilio.com/help/faq/phone-numbers/how-do-i-format-phone-numbers-to-work-internationally
https://www.twilio.com/lookup

Explorando node y express – parte 1

En la actualidad las aplicaciones web están tomando un enfoque mas amplio al controlar desde el servidor web hasta el contenido final que es servido al usuario final, node la plataforma construida en el runtime javascript de chrome permite la rápida construcción de aplicaciones usando un modelo de no bloqueo en I/O y basado en eventos hacen de la plataforma ideal para aplicaciones web escalables, aplicaciones de redes y aplicaciones con cargas de datos intensivas en tiempo real haciendo uso de base de datos nosql como MongoDB, CouchDB, Riak.

Node.js es una plataforma en la cual se han desarrollado muchos componentes que en conjunto brindan toda la funcionalidad necesaria para construir aplicaciones web, como es connect un framework middleware para node, express framework para aplicaciones web, jade

Para este articulo lo primero sera instalar node y el framework express

node esta disponible para todas las plataformas Windows(instaladores para 32 y 64 bits), Linux, Solaris, FreeBSD, Darwin en codigo fuente para compilar e instalar.

Una vez instalado node tenemos acceso al gestor de modulos npm y podremos instalaremos express
express se puede configurar de 2 maneras.

la primera opcione es crear un directorio con un descriptor para la aplicación, un archivo
package.json y luego ejecutar la instalación del modulo express con npm

$ mkdir ndemo
$ cd ndemo
$ vim package.json
$ npm install 
$ npm ls

Descriptor de la aplicacion: package.json

// file: package.json
{
    "name":"ndemo",
    "version":"0.0.1",
    "private":true,
    "scripts":{
        "start":"node app"
    },
    "dependencies":{
        "express":"3.x",
        "jade":"*",
        "stylus":"*"
    }
}

la otra alternativa es instalar express de manera global usando npm y utilizar el comando express para crear la aplicación.

# requiere permisos de root
$ npm install -g express
$ express -s -c stylus ndemo

al final se tendrá el directorio de la aplicación con los módulos necesarios como se muestra en la imagen usando “npm ls” se pueden ver las dependencias de express en la aplicación

npm ls

Con la primera opción se debe crear el script de inicio y del servidor para arrancar la aplicación, con la segunda opción estos archivos son creados automáticamente.