Self-intersections of NURBS surfaces are unavoidable during the CAD modeling process, especially in operations such as offset or sweeping. The existence of self-intersections might cause problems in the latter simulation and manufacturing process. Therefore, fast detection of self-intersections of NURBS is highly demanded in industrial applications. Self-intersections are essentially singular points on the surface. Although there is a long history of exploring singular points in mathematics community, the fast and robust determination and computation of self-intersections have been a challenging problem in practice. In this paper, we construct an algebraic signature whose non-negativity is proven to be sufficient for excluding the existence of self-intersections from a global perspective. An efficient algorithm for determining the existence of self-intersections is provided by recursively using this signature. Once the self-intersection is detected, if necessary, the self-intersection locus can also be computed via a further recursively cross use of this signature and the surface-surface intersection function. Various experiments and comparisons with existing methods, as well as geometry kernels, including OCCT and ACIS, validate the robustness and efficiency of our algorithm. We also adapt our algorithm to self-intersection elimination, self-intersection trimming, as well as applications in mesh generation, boolean operation, and shelling.