All pastes #254170 Raw Edit

Anonymous

public text v1 · immutable
#254170 ·published 2006-11-21 16:03 UTC
rendered paste body
/*
  +----------------------------------------------------------------------+
  | PHP Version 5                                                        |
  +----------------------------------------------------------------------+
  | Copyright (c) 1997-2006 The PHP Group                                |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.php.net/license/3_01.txt                                  |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Author: Marcelo Santos Araujo <msaraujo@php.net>                     |
  +----------------------------------------------------------------------+
*/

/* $Id: header,v 1.16.2.1 2006/01/01 12:50:00 sniper Exp $ */

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif


#include "zend_compile.h"
#include "zend_interfaces.h"
#include "zend_exceptions.h"
#include "php.h"
#include "php_ini.h"
#include "ext/standard/info.h"
#include "php_validate_ptbr.h"


static int le_validate_ptbr;


typedef struct _validate_ptbr_object {
	zend_object std;
} validate_ptbr_object;


static zend_object_handlers validate_ptbr_handlers;
static zend_class_entry *validate_ptbr_ce;





static void validate_ptbr_object_dtor(void *object, zend_object_handle handle TSRMLS_DC)
{
	validate_ptbr_object *intern = (validate_ptbr_object*) object;
	zend_object_std_dtor(&(intern->std) TSRMLS_CC);
}


static zend_object_value validate_ptbr_create_object(zend_class_entry *ce TSRMLS_DC)
{
	zval tmp;
	zend_object_value retval;
	validate_ptbr_object *intern;

	intern = ecalloc(1, sizeof(validate_ptbr_object));
	zend_object_std_init(&(intern->std), ce TSRMLS_CC);
	zend_hash_copy(intern->std.properties,
				   &ce->default_properties, (copy_ctor_func_t) zval_add_ref,
				   (void *) &tmp, sizeof(zval *));

	retval.handle = zend_objects_store_put(intern, validate_ptbr_object_dtor, NULL, NULL TSRMLS_CC);
	retval.handlers = &validate_ptbr_handlers;
	return retval;
}

PHP_METHOD(Validate_ptBR, __construct)
{
        validate_ptbr_object *intern = (validate_ptbr_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
}



PHP_METHOD(Validate_ptBR,cnpj)
{

	char *cnpj = NULL;
	int argc = ZEND_NUM_ARGS(), cnpj_len;
        int cnpjnumero[14];
        int sum = 0, i = 0;
        int rrpd = 0, rrsd = 0, pdv = 0, sdv = 0;
        if (zend_parse_parameters(argc TSRMLS_CC, "s", &cnpj, &cnpj_len) == FAILURE) 
	    return;

        for(i = 0; i < 12; i++) 
        {
            cnpjnumero[i] = (int) cnpj[i] - 48;
        }

        sum = 5*cnpjnumero[0] + 4*cnpjnumero[1] + 3*cnpjnumero[2] + 2*cnpjnumero[3] + 9*cnpjnumero[4] + 8*cnpjnumero[5] 
              + 7*cnpjnumero[6] + 6*cnpjnumero[7] + 5*cnpjnumero[8] + 4*cnpjnumero[9] + 3*cnpjnumero[10] + 2*cnpjnumero[11];
        rrpd = sum % 11;
        pdv = rrpd < 2 ? 0 : 11 - rrpd ; 
        sum = 0; 
        cnpjnumero[12] = pdv;
        sum =  6*cnpjnumero[0] + 5*cnpjnumero[1] + 4*cnpjnumero[2] + 3*cnpjnumero[3] + 2*cnpjnumero[4] + 9*cnpjnumero[5] 
               + 8*cnpjnumero[6] + 7*cnpjnumero[7] +6*cnpjnumero[8] + 5*cnpjnumero[9] + 4*cnpjnumero[10]
               + 3*cnpjnumero[11] + 2*cnpjnumero[12];
        rrsd = sum % 11;
        sdv = rrsd < 2 ? 0 : 11 - rrsd;

        if( (pdv == (int) cnpj[12] - 48) && (sdv = (int) cnpj[13] - 48) ) {
            RETURN_TRUE;
        }        else RETURN_FALSE;
}

PHP_METHOD(Validate_ptBR,cpf)
{
        char *cpf = NULL;
	int argc = ZEND_NUM_ARGS(), cpf_len, cpfnumero[12], 
        i,j,sum = 0, resultado_primeiro_digito, resultado_resto_primeiro_digito,
        pdv, sdv, a, b, resultado_segundo_digito, resultado_resto_segundo_digito;

	if (zend_parse_parameters(argc TSRMLS_CC, "s", &cpf, &cpf_len) == FAILURE) 
		return;
        else if ( (strlen(cpf) != 11) ) { RETURN_FALSE; }
        else if(strcmp(cpf,"11111111111") == 0 ) { RETURN_FALSE; }
        else if(strcmp(cpf,"22222222222") == 0 ) { RETURN_FALSE; }
        else if(strcmp(cpf,"33333333333") == 0 ) { RETURN_FALSE; }
        else if(strcmp(cpf,"44444444444") == 0 ) { RETURN_FALSE; }
        else if(strcmp(cpf,"55555555555") == 0 ) { RETURN_FALSE; }
        else if(strcmp(cpf,"66666666666") == 0 ) { RETURN_FALSE; }
        else if(strcmp(cpf,"77777777777") == 0 ) { RETURN_FALSE; }
        else if(strcmp(cpf,"88888888888") == 0 ) { RETURN_FALSE; }
        else if(strcmp(cpf,"99999999999") == 0 ) { RETURN_FALSE; }
        else if(strcmp(cpf,"00000000000") == 0 ) { RETURN_FALSE; }
        else {
   
        for(i=0,j=10; i<9; i++,j--) 
        {
            cpfnumero[j] = (int) cpf[i] - 48;
            sum = sum + j*(cpfnumero[j]);
        }
        a = (int)cpf[9] - 48;
        b = (int)cpf[10] - 48;
   
        resultado_primeiro_digito = 	sum / 11;
        resultado_resto_primeiro_digito = sum % 11;
        pdv = (resultado_resto_primeiro_digito < 2) ? 0 : (11 - resultado_resto_primeiro_digito);
        sum = 0;   
        for(i = 10, j=11; i > 2; i--, j--)	
            cpfnumero[j] = cpfnumero[i]; 
        cpfnumero[2] = pdv;
        for(j=11; j > 1; j--)
	    sum = sum + j*(cpfnumero[j]);
        resultado_segundo_digito =  sum / 11;
        resultado_resto_segundo_digito = sum % 11;
        sdv = (resultado_resto_segundo_digito < 2) ? 0 : (11 - resultado_resto_segundo_digito);
        cpfnumero[1] = sdv;
        if (a == pdv && b == sdv) { 
            RETURN_TRUE;
           }
        else { 
            RETURN_FALSE;
        }


   }
}

zend_function_entry validate_ptbr_functions[] = {
	{NULL, NULL, NULL}
};

zend_function_entry validate_ptbr_class_functions[] = {
        PHP_ME(Validate_ptBR, __construct, NULL, ZEND_ACC_PUBLIC)
	PHP_ME(Validate_ptBR, cpf,          NULL, ZEND_ACC_PUBLIC)
	PHP_ME(Validate_ptBR, cnpj,       NULL, ZEND_ACC_PUBLIC)
	{NULL, NULL, NULL}
};
PHP_MINIT_FUNCTION(validate_ptbr)
{


	/* If you have INI entries, uncomment these lines 
	REGISTER_INI_ENTRIES();
	*/

	zend_class_entry ce;
	INIT_CLASS_ENTRY(ce, "Validate_ptBR", validate_ptbr_class_functions);
	validate_ptbr_ce = zend_register_internal_class(&ce TSRMLS_CC);
	validate_ptbr_ce->create_object = validate_ptbr_create_object;
	memcpy(&validate_ptbr_handlers, zend_get_std_object_handlers(),
		   sizeof(zend_object_handlers));
	validate_ptbr_ce->ce_flags |= ZEND_ACC_FINAL;
	return SUCCESS;


}
PHP_MSHUTDOWN_FUNCTION(validate_ptbr)
{
	/* uncomment this line if you have INI entries
	UNREGISTER_INI_ENTRIES();
	*/
	return SUCCESS;
}



PHP_RINIT_FUNCTION(validate_ptbr)
{
	return SUCCESS;
}


PHP_RSHUTDOWN_FUNCTION(validate_ptbr)
{
	return SUCCESS;
}


PHP_MINFO_FUNCTION(validate_ptbr)
{
	php_info_print_table_start();
	php_info_print_table_header(2, "validate_ptbr support", "enabled");
        php_info_print_table_header(2,"validate_ptbr author", "Marcelo Araujo");
	php_info_print_table_end();
}

zend_module_entry validate_ptbr_module_entry = {
#if ZEND_MODULE_API_NO >= 20010901
	STANDARD_MODULE_HEADER,
#endif
	"validate_ptbr",
        validate_ptbr_functions,
	PHP_MINIT(validate_ptbr),
	PHP_MSHUTDOWN(validate_ptbr),
	PHP_RINIT(validate_ptbr),		/* Replace with NULL if there's nothing to do at request start */
	PHP_RSHUTDOWN(validate_ptbr),	/* Replace with NULL if there's nothing to do at request end */
	PHP_MINFO(validate_ptbr),
#if ZEND_MODULE_API_NO >= 20010901
	"0.1", /* Replace with version number for your extension */
#endif
	STANDARD_MODULE_PROPERTIES
};
/* }}} */

#ifdef COMPILE_DL_VALIDATE_PTBR
ZEND_GET_MODULE(validate_ptbr)
#endif


/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: noet sw=4 ts=4 fdm=marker
 * vim<600: noet sw=4 ts=4
 */