Leer cadena buró de crédito

20 vistas
Ir al primer mensaje no leído

Alonso Manilla

no leída,
29 may 2013, 6:56:59 p.m.29/5/13
para comuni...@googlegroups.com
Hola a todos.

Estoy trabajando en un proyecto para leer datos del buró de crédito. Me envían una cadena que tiene un formato muy peculiar. Debo obtener los datos y guardarlos en una variable cada uno.

La cadena es:

PN06ROMERO0006CUENTO0208GILBERTO0408010619750513ROCG750601HI10602SR0802MX090111101M1201MPA14APOCALIPTO 8900106CENTRO0212TLALNEPANTLA0319TLALNEPANTLA DE BAZ0402EM050554000120801022007PA18GIRASOLES 32 INT 30113SAN FRANCISCO0218DELEGACION TLALPAN0306MEXICO0402DF0505108101001H120803102005TL08031020050110BC120010010206BC-1TN041649128480125968560501I0601R0702CC0802MX1101M120101308050520011708100520131801M210556000220632000+230610000024010250152602012724111111111111222111XXX112280803092005290803102001310304832020536010370803092004380202TL08170520070110BY996000010206BC-1TN030955449490904097856932580501I0601I0702AU0802N$1002321101M120480001308011120071708090520131801A210580000220635000+24010260201TL08120420050110QM996000010206BC-1TN0309056825029041610110101017199940501I0601M0702RE0802UD090617705210032991101M1308191220021408280320051608311220081708310320051801A2106159347220628711+250112602012723111111122111211111111112808280220052908280420033603123370831072004380202TL08220119990110BH996000010206BC-1TN040711620200501I0601M0702HE0802UD10032401101M1308151219951408161019981608161019981708171119981801A210618783122020+24010250112602012705XX2112808171019982908010619983002CZ370801081998380202TL08041020050110AA996000010206BC-1TN04097856932580501I0601I0702AU0802N$1002321101M120101308151020071408010120051508010120051708041020051801M2105800002202

Está codificada de la siguiente manera:

PN: Es el identificador del segmento Nombre y contiene el apellido paterno
06:  Es la longitud del dato
ROMERO: es el dato
00: Es el identificador de apellido materno
06: Es la longitud del dato
CUENTO: es el dato
02: Es el identificador del nombre
08: Es la longitud del dato
GILBERTO: es el dato
así hasta llegar a
PA: Es el identificador del segmento Dirección y contiene la calle y número (este segmento se puede repetir 4 veces)
14: es la longitud del dato
APOCALIPTO 890: es el dato
01: Es el identificador de colonia
06: Es la longitud del dato
CENTRO: es el dato
otra vez esto para llegar a
TL: es el identificador del segmento de cuentas y contiene fecha de actualizacion (este segmento se puede repetir n veces)
08: es la longitud del dato
03102005: es el dato
..y se repite para toda la cadena.


He intentado partir la cadena utilizando strpos() pero la verdad es que creo que vi demasiado la cadena y no encuentro como obtener cada uno de los datos.

A ver si alguien tiene una idea y la comenta.

De antemano muchas gracias.

Javier López López

no leída,
29 may 2013, 7:22:11 p.m.29/5/13
para comuni...@googlegroups.com
Puse esta respuesta en el hilo equivocado, sorry

Se puede con expresiones regulares desde PHP, aunque en rendimiento creo que es mejor desde C, pero si lo quieres hacer  desde PHP, solo prueba con expresiones regulares.

Saludos
Javier L
Senior PHP Developer


--
--
Has recibido este mensaje porque estás suscrito a
Grupo "ComunidadPHP" de Grupos de Google.
Si quieres publicar en este grupo, envía un mensaje de correo
electrónico a programad...@googlegroups.com
Para anular la suscripción a este grupo, envía un mensaje a
programadoresde...@googlegroups.com
Para obtener más opciones, visita este grupo en
http://groups.google.com/group/programadoresdephp?hl=es.
---
Has recibido este mensaje porque estás suscrito al grupo "ComunidadPHP" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a comunidadphp...@googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/groups/opt_out.
 
 

Alonso Manilla

no leída,
29 may 2013, 7:46:06 p.m.29/5/13
para comuni...@googlegroups.com
Nunca las he utilizado... alguna sugerencia para un manual sencillo y práctico?

Saludos y gracias

--
Alonso Manilla


Has recibido este mensaje porque estás suscrito a un tema del grupo "ComunidadPHP" de Grupos de Google.
Para anular la suscripción a este tema, visita https://groups.google.com/d/topic/comunidadphp/oQWbFvpbYlo/unsubscribe?hl=es-419. Para anular la suscripción a este grupo y todos sus temas, envía un correo electrónico a comunidadphp...@googlegroups.com.

Javier López López

no leída,
29 may 2013, 8:00:24 p.m.29/5/13
para comuni...@googlegroups.com
Revisa esto, quizas te pueda servir

http://www.php.net/manual/es/pcre.pattern.php

Aunque al principio parece un poco confuso son muy utiles,

Ejemplo:
Hice un ejemplo de como quedaria, solo que hice solo una parte, necesitarias terminarla
te dejo el codigo por si te sirve

<?php

$string = 'PN06ROMERO0006CUENTO0208GILBERTO0408010619750513ROCG750601HI10602SR0802MX090111101M1201MPA14APOCALIPTO 8900106CENTRO0212TLALNEPANTLA0319TLALNEPANTLA DE BAZ';
$preg = '/(?)([\d]+)([A-Z\s]+)/i';

preg_match_all($preg, $string, $result);

print_r($result);
?>
El resultado sale como

Array
(
    [0] => Array
        (
            [0] => 06ROMERO
            [1] => 0006CUENTO
            [2] => 0208GILBERTO
            [3] => 0408010619750513ROCG
            [4] => 750601HI
            [5] => 10602SR
            [6] => 0802MX
            [7] => 090111101M
            [8] => 1201MPA
            [9] => 14APOCALIPTO 
            [10] => 8900106CENTRO
            [11] => 0212TLALNEPANTLA
            [12] => 0319TLALNEPANTLA DE BAZ
        )

    [1] => Array
        (
            [0] => 06
            [1] => 0006
            [2] => 0208
            [3] => 0408010619750513
            [4] => 750601
            [5] => 10602
            [6] => 0802
            [7] => 090111101
            [8] => 1201
            [9] => 14
            [10] => 8900106
            [11] => 0212
            [12] => 0319
        )

    [2] => Array
        (
            [0] => ROMERO
            [1] => CUENTO
            [2] => GILBERTO
            [3] => ROCG
            [4] => HI
            [5] => SR
            [6] => MX
            [7] => M
            [8] => MPA
            [9] => APOCALIPTO 
            [10] => CENTRO
            [11] => TLALNEPANTLA
            [12] => TLALNEPANTLA DE BAZ
        )

)


Como veras el resultado esta el la ultima parte del array, revisa el manual y checa como terminar la expresion.

Saludos
Javier L
Senior PHP Developer

Alonso Manilla

no leída,
29 may 2013, 8:15:26 p.m.29/5/13
para comuni...@googlegroups.com
Orale... gracias. 
Ya nada más me puedes explicar esta expresión:  '/(?)([\d]+)([A-Z\s]+)/i';



--
Alonso Manilla

Javier López López

no leída,
29 may 2013, 8:35:38 p.m.29/5/13
para comuni...@googlegroups.com
Claro, de echo creo que se me fue el ? en la expresión, la cual quedaría así y aqui esta un poco de explicación:

$preg = '/([\d]+)([A-Z\s]+)/i';

([\d]+) => Encuentra unicamente numeros (\d) las veces que aparezcan +
 ([A-Z\s]+) => Encuentra textos que tengan de la A-Z o un espacio (\s) las veces que aparezcan
 /i       => Sin importar mayúsculas o minusculas


Mario Robles Patiño

no leída,
30 may 2013, 3:28:58 a.m.30/5/13
para comuni...@googlegroups.com
Bueno no tengo idea de como programar algo así, estoy muy verde en esto de la programasen, solamente quiero comentar que es muy importante conocer muy bien los datos que deberían mostrarse.
pues en la cadena de valores asignada a la variable $string es evidente que contiene el apellido paterno, el apellido materno y el nombre de una persona, después aparece lo que al parecer es la dirección  de un domicilio particular.

entre el nombre de la persona y su dirección es posible que haya más datos, con certeza uno de ellos es el RFC el cual más abajo lo he marcado de color amarillo, (OJO hay RFC´s que en lugar de iniciar con cuatro letras solo tienen 3, normalmente son los asignados a las empresas).


$string = 'PN06ROMERO0006CUENTO0208GILBERTO0408010619750513ROCG750601HI10602SR0802MX090111101M1201MPA14APOCALIPTO 8900106CENTRO0212TLALNEPANTLA0319TLALNEPANTLA DE BAZ';

por lo que aplicar el algoritmo que se encuentra abajo y que fue propuesto por el ing Javier, aun que cumple su función muy bien.

<?php

$string = 'PN06ROMERO0006CUENTO0208GILBERTO0408010619750513ROCG750601HI10602SR0802MX090111101M1201MPA14APOCALIPTO 8900106CENTRO0212TLALNEPANTLA0319TLALNEPANTLA DE BAZ';
$preg = '/(?)([\d]+)([A-Z\s]+)/i';

preg_match_all($preg, $string, $result);

print_r($result);
?>


[2] => Array
        (
            [0] => ROMERO
            [1] => CUENTO
            [2] => GILBERTO
            [3] => ROCG
            [4] => HI
            [5] => SR
            [6] => MX
            [7] => M
            [8] => MPA
            [9] => APOCALIPTO 
            [10] => CENTRO
            [11] => TLALNEPANTLA
            [12] => TLALNEPANTLA DE BAZ

[2] => Array
        (
            [0] => ROMERO
            [1] => CUENTO
            [2] => GILBERTO
            [3] => ROCG750601HI1
            [4] => SR
            [5] => MX
            [6] => M
            [7] => MPA
            [8] => APOCALIPTO 
            [9] => CENTRO
            [10] => TLALNEPANTLA
            [11] => TLALNEPANTLA DE BAZ


aun así todavía falta saber que información va en la linea 4, 5, 6, y 7 (si es que va alguna informacion)


Saludos  y por favor si resuelven este dilema compartan por favor me ayudaria mucho para seguir aprendiendo

Mario Robles
Responder a todos
Responder al autor
Reenviar
0 mensajes nuevos