diff --git a/addons/base_vat/models/res_partner.py b/addons/base_vat/models/res_partner.py
index 6c104b45fbe82fa00e3907a65baf4155fd7c34aa..6e4a242a4e3e0f84cf296c3859c30919d8b5441c 100644
--- a/addons/base_vat/models/res_partner.py
+++ b/addons/base_vat/models/res_partner.py
@@ -262,60 +262,18 @@ class ResPartner(models.Model):
             return check == int(num[8])
         return False
 
-    def _checksum_ci_ec(self, number):
-        """Calculate a checksum over the number."""
-        fold = lambda x: x - 9 if x > 9 else x
-        return sum(fold((2, 1)[i % 2] * int(n))
-                for i, n in enumerate(number)) % 10
-
-    def _checksum_ruc_ec(self, number, weights):
-        """Calculate a checksum over the number given the weights."""
-        return sum(w * int(n) for w, n in zip(weights, number)) % 11
-
-    def is_valid_ci_ec(self, vat):
-        """Check if the number provided is a valid CI number. This checks the
-        length, formatting and check digit."""
-        if len(vat) != 10:
-            return False
-        if not vat.isdecimal():
-            return False
-        if (vat[:2] < '01' or vat[:2] > '24') and (vat[:2] not in ('30', '50')):
-            return False
-        if vat[2] > '6':
-            return False
-        if self._checksum_ci_ec(vat) != 0:
-            return False
-        return True
 
     def is_valid_ruc_ec(self, vat):
-        """Check if the number provided is a valid RUC number. This checks the
-        length, formatting, check digit and check sum."""
-        if len(vat) != 13:
-            return False
-        if not vat.isdecimal():
-            return False
-        if (vat[:2] < '01' or vat[:2] > '24') and (vat[:2] not in ('30', '50')):
-            return False
-        if vat[2] <= '5':
-            # 0..5 = natural RUC: CI plus establishment number
-            if vat[-3:] == '000':
-                return False
-            return self.is_valid_ci_ec(vat[:10])
-        elif vat[2] == '6':
-            # 6 = public RUC
-            #if vat[-4:] == '0000':
-            #    return False
-            if self._checksum_ruc_ec(vat[:9], (3, 2, 7, 6, 5, 4, 3, 2, 1)) != 0:
-                return False
-        elif vat[2] == '9':
-            # 9 = juridical RUC
-            if vat[-3:] == '000':
-                return False
-            if self._checksum_ruc_ec(vat[:10], (4, 3, 2, 7, 6, 5, 4, 3, 2, 1)) != 0:
-                return False
-        else:
-            return False
-        return True
+        ci = stdnum.util.get_cc_module("ec", "ci")
+        ruc = stdnum.util.get_cc_module("ec", "ruc")
+        if len(vat) == 10:
+            return ci.is_valid(vat)
+        elif len(vat) == 13:
+            if vat[2] == "6" and ci.is_valid(vat[:10]):
+                return True
+            else:
+                return ruc.is_valid(vat)
+        return False
 
     def check_vat_ec(self, vat):
         vat = clean(vat, ' -.').upper().strip()