Class: BR::CNPJ

Inherits:
Object
  • Object
show all
Defined in:
lib/br/cnpj.rb,
ext/CNPJ/ruby_cnpj.c

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(*args) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'ext/CNPJ/ruby_cnpj.c', line 4

static VALUE t_init_cnpj(int argc, VALUE *argv, VALUE self)
{
    int radix = 0;
    int filial = 0;
    int verif = 0;
    VALUE valid = Qnil;

    if (argc == 2) {
        radix = FIX2INT(argv[0]);
        if( radix >= 100000000 || radix < 0 )
            rb_raise(rb_eArgError, "radix should be greater than -1 or lesser than 10_000_000");
        filial = NUM2INT(argv[1]);
        if( filial >= 10000 || filial < 1)
            rb_raise(rb_eArgError, "filial should be greater than 0 or lesser than 10_000");
        verif = calculate_digit(radix,filial);
        valid = Qtrue;
    }
    else if (argc == 1) {
        lldiv_t v;
        long long cnpj = 0;

        if (rb_class_of(argv[0]) == rb_cString) 
            cnpj = NUM2LL(rb_str_to_inum(argv[0], 10, 0));
        else
            if (rb_class_of(argv[0]) == rb_cFixnum ||
                rb_class_of(argv[0]) == rb_cBignum)
                cnpj = NUM2LL(argv[0]);

        v = lldiv(cnpj, (long long)100);
        verif = (int)v.rem;
        v = lldiv(v.quot, (long long)10000);
        filial = (int)v.rem;
        radix = (int)v.quot;
        valid = (verif == calculate_digit(radix,filial)) ? Qtrue : Qfalse;
    }

    rb_iv_set(self, "@radix", INT2FIX(radix));
    rb_iv_set(self, "@filial", INT2FIX(filial));
    rb_iv_set(self, "@digit", INT2FIX(verif));
    rb_iv_set(self, "@valid", valid);

    return self;
}

Instance Attribute Details

#digitObject (readonly)

Returns the value of attribute digit.



49
50
51
# File 'lib/br/cnpj.rb', line 49

def digit
  @digit
end

#filialObject (readonly)

Returns the value of attribute filial.



49
50
51
# File 'lib/br/cnpj.rb', line 49

def filial
  @filial
end

#radixObject (readonly)

Returns the value of attribute radix.



49
50
51
# File 'lib/br/cnpj.rb', line 49

def radix
  @radix
end

#validObject (readonly)

Returns the value of attribute valid.



49
50
51
# File 'lib/br/cnpj.rb', line 49

def valid
  @valid
end

Class Method Details

.format(cnpj) ⇒ Object Also known as: formatar

Format unformated Cnpj

Cnpj.format(191) # => ‘00.000.000/0001-91’ Cnpj.formatar(30553786000135) # => “30.553.786/0001-35”



14
15
16
17
# File 'lib/br/cnpj.rb', line 14

def format(cnpj)
  cnpj = cnpj.to_s.rjust(14, "0")
  "%s.%s.%s/%s-%s" % [cnpj[0,2], cnpj[2,3], cnpj[5,3], cnpj[8,4], cnpj[12,2]]
end

.orig_valid?Object



7
# File 'lib/br/cnpj.rb', line 7

alias_method :orig_valid?, :valid?

.unformat(cnpj) ⇒ Object Also known as: desformatar

Unformat formated Cnpj

Cnpj.desformatar(“02.716.485/0001-40”) # => “02716485000140” Cnpj.unformat(“00.086.001/0001-04”) # => “00086001000104”



27
28
29
# File 'lib/br/cnpj.rb', line 27

def unformat(cnpj)
   cnpj.gsub(/\D/, '')
end

.valid?(ruby_cnpj) ⇒ Boolean

Returns true if Cnpj is valid Retorns false if Cnpj is invalid

CNPJ.valid?(191) # => true CNPJ.valid?(123456789101) # => false

Returns:

  • (Boolean)


40
41
42
43
44
45
46
# File 'lib/br/cnpj.rb', line 40

def valid?(cnpj)
  if cnpj.is_a? String
    orig_valid?(cnpj.to_i)
  else
    orig_valid?(cnpj)
  end
end

Instance Method Details

#is_cgc?Boolean

Returns:

  • (Boolean)


48
49
50
51
52
53
54
55
# File 'ext/CNPJ/ruby_cnpj.c', line 48

static VALUE rb_is_cgc(VALUE self){
    long long radix=0;
    int filial = 0, verify_digit = 0;
    radix = NUM2INT(rb_iv_get(self, "@radix"));
    filial = NUM2INT(rb_iv_get(self, "@filial"));
    verify_digit = NUM2INT(rb_iv_get(self, "@digit"));
    return is_cgc((long long)radix * 1000000 + filial * 100 + verify_digit) ? Qtrue : Qfalse;
}

#to_iObject



59
60
61
# File 'lib/br/cnpj.rb', line 59

def to_i
  @radix * 1_000_000 + @filial * 100 + @digit
end

#to_sObject

Return the CNPJ with 14 characters

CNPJ.new(191).to_s # => ‘00000000000191’



67
68
69
# File 'lib/br/cnpj.rb', line 67

def to_s
  "%014d" % to_i
end

#valid?Boolean

Return if the instance CNPJ is valid?

Cnpj.new(191).valid? # => true

Returns:

  • (Boolean)


55
56
57
# File 'lib/br/cnpj.rb', line 55

def valid?
  @valid
end